日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL CHAR和VARCHAR存儲、讀取時(shí)的差別

瀏覽:30日期:2023-10-09 17:55:52

導(dǎo)讀

你真的知道CHAR和VARCHAR類型在存儲和讀取時(shí)的區(qū)別嗎?

還是先拋幾條結(jié)論吧:

1、存儲的時(shí)候,CHAR總是會補(bǔ)足空格后再存儲,不管用戶插入數(shù)據(jù)時(shí)尾部有沒有包含空格。

2、存儲的時(shí)候,VARCHAR不會先補(bǔ)足空格后再存儲,但如果是用戶在插入時(shí)特地加了空格那就會如實(shí)存儲,而不會給刪除。

3、讀取數(shù)據(jù)時(shí),CHAR總是會刪除尾部空格(哪怕是寫入時(shí)包含空格)。

4、讀取數(shù)據(jù)時(shí),VARCHAR總是如實(shí)取出之前存入的值(如果存儲時(shí)尾部包含空格,就會繼續(xù)保留著,不會像CHAR那樣刪除尾部空格)。

下面是測試驗(yàn)證過程。

1、測試CHAR類型

表結(jié)構(gòu):

CREATE TABLE `tchar` ( `id` int(10) unsigned NOT NULL DEFAULT ’0’, `c1` char(20) NOT NULL DEFAULT ’’, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入幾條記錄:

insert into tchar values (1, concat(’a’, repeat(’ ’,19)));insert into tchar values (2, concat(’ ’, repeat(’a’,19)));insert into tchar values (3, ’a’);insert into tchar values (4, ’ ’);insert into tchar values (5, ’’);

查看存儲結(jié)構(gòu):

(1) INFIMUM record offset:99 heapno:0 ...(2) SUPREMUM record offset:112 heapno:1 ...(3) normal record offset:126 heapno:2 ... <- id=1(4) normal record offset:169 heapno:3 ... <- id=2(5) normal record offset:212 heapno:4 ... <- id=3(6) normal record offset:255 heapno:5 ... <- id=4(7) normal record offset:298 heapno:6 ... <- id=5

看到這坨東西有點(diǎn)懵是不是,還記得我給你們安利過的一個(gè)工具不,看這里:innblock | InnoDB page觀察利器。

可以看到,無論我們存儲多長的字符串進(jìn)去,每條記錄實(shí)際都是占用43(169-126=43)字節(jié)。由此結(jié)論1成立。簡單說下,43字節(jié)的由來:DB_TRX_ID, 6字節(jié)。DB_ROLL_PTR, 7字節(jié)。id, int, 4字節(jié)。c1, char(20), 20字節(jié);因?yàn)槭荂HAR類型,還需要額外1字節(jié)。每條記錄總是需要額外5字節(jié)頭信息(row header)。這樣總的加起來就是43字節(jié)了。

再看下讀取tchar表的結(jié)果:

select id,concat(’000’,c1,’$$$’),length(c1) from tchar ;+----+----------------------------+------------+| id | concat(’000’,c1,’$$$’) | length(c1) |+----+----------------------------+------------+| 1 | 000a$$$ | 1 | <- 刪除尾部空格| 2 | 000 aaaaaaaaaaaaaaaaaaa$$$ | 20 || 3 | 000a$$$ | 1 || 4 | 000$$$ | 0 | <- 刪除尾部空格,結(jié)果和id=5一樣| 5 | 000$$$ | 0 |+----+----------------------------+------------+

2、測試VARCHAR類型

表結(jié)構(gòu):

CREATE TABLE `tvarchar` ( `id` int(10) unsigned NOT NULL DEFAULT ’0’, `c1` varchar(20) NOT NULL DEFAULT ’’, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

插入幾條記錄:

insert into tvarchar values (1, concat(’a’, repeat(’ ’,19)));insert into tvarchar values (2, concat(’ ’, repeat(’a’,19)));insert into tvarchar values (3, ’a’);insert into tvarchar values (4, ’ ’);insert into tvarchar values (5, ’’);insert into tvarchar values (6, ’’);

查看存儲結(jié)構(gòu):

(1) INFIMUM record offset:99 heapno:0 ...(2) SUPREMUM record offset:112 heapno:1 ...(3) normal record offset:126 heapno:2 ... <- id=1(4) normal record offset:169 heapno:3 ... <- id=2(5) normal record offset:212 heapno:4 ... <- id=3(6) normal record offset:236 heapno:5 ... <- id=4(7) normal record offset:260 heapno:6 ... <- id=5(8) normal record offset:283 heapno:7 ... <- id=6

可以看到,幾條記錄的字節(jié)數(shù)分別是:43、43、24、24、23、23(最后一條記錄和id=5那條記錄一樣)。對上面這個(gè)結(jié)果有點(diǎn)詫異是不是,尤其是id=1的記錄(插入的是’a…后面19個(gè)空格’),居然也要消耗43字節(jié),這就佐證了上面的結(jié)論2。同樣的,id=3和id=4這兩條記錄都是占用24字節(jié),而id=5和id=6這兩條記錄都是占用23字節(jié)(沒有額外存儲字符串的字節(jié)數(shù),只有id列4個(gè)字節(jié))。

再看下讀取tvarchar表的結(jié)果:

select id,concat(’000’,c1,’$$$’),length(c1) from tvarchar;+----+----------------------------+------------+| id | concat(’000’,c1,’$$$’) | length(c1) |+----+----------------------------+------------+| 1 | 000a $$$ | 20 | <- 讀取結(jié)果中沒有刪除尾部的空格| 2 | 000 aaaaaaaaaaaaaaaaaaa$$$ | 20 || 3 | 000a$$$ | 1 || 4 | 000 $$$ | 1 | <- 讀取結(jié)果中沒有刪除此空格| 5 | 000$$$ | 0 || 6 | 000$$$ | 0 |+----+----------------------------+------------+

總的來說,可以總結(jié)成兩條結(jié)論:1、從讀取的結(jié)果來看,CHAR類型列看起來像是在存儲時(shí)把空格給吃了,但實(shí)際上只是在讀取時(shí)才給吃了(顯示層面上把空格刪除了)。2、從讀取的結(jié)果來看,VARCHAR類型列看起來像是反倒保留了多余的空格,實(shí)際上也是只在讀取時(shí)才恢復(fù)這些空格(但實(shí)際物理存儲時(shí)還是會刪掉這些空格)。

最后,來看下文檔里怎么說的:

When CHAR values are stored, they are right-padded with spaces to thespecified length. 簡言之,CHAR列在存儲時(shí)尾部加空格補(bǔ)齊長度。

When CHAR values are retrieved, trailing spaces are removed unless thePAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.簡言之,CHAR列在讀取時(shí)會去掉尾部空格,除非設(shè)置sql_mode值PAD_CHAR_TO_FULL_LENGTH=1。

VARCHAR values are not padded when they are stored.簡言之,存VARCHAR時(shí)尾部不加空格。

Trailing spaces are retained when values are stored and retrieved, inconformance with standard SQL. 簡言之,讀取VARCHAR時(shí)會顯示空格。

以上測試使用的版本及環(huán)境:

mysql> select version()G...version(): 8.0.15mysql> select @@sql_modeG...@@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

參考文檔

11.4.1 The CHAR and VARCHAR Types,https://dev.mysql.com/doc/refman/5.7/en/char.html

以上就是MySQL CHAR和VARCHAR存儲的差別的詳細(xì)內(nèi)容,更多關(guān)于MySQL CHAR和VARCHAR的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
桃色av一区二区| 麻豆精品蜜桃视频网站| 免费不卡在线观看| 国产激情久久| 伊人精品在线| 精品视频网站| 羞羞答答国产精品www一本| 久久精品一区二区三区中文字幕| 人人草在线视频| 日韩不卡一区二区| 欧美影院三区| 美腿丝袜亚洲一区| 先锋亚洲精品| 色爱综合av| 国产精品a久久久久| 免播放器亚洲| 日韩精品网站| 久久不见久久见免费视频7| 麻豆精品91| 久久亚洲国产| 久久久久久久欧美精品| 视频福利一区| 国产欧美丝祙| 日韩精品一卡二卡三卡四卡无卡| 中文字幕高清在线播放| 国产欧美精品| 蜜桃久久av一区| 91精品精品| 国产999精品在线观看| 国产亚洲一区二区三区啪| 亚洲一区国产一区| 日韩精品一区二区三区免费观影 | av免费不卡国产观看| 国产亚洲高清在线观看| 丝袜美腿亚洲色图| 国户精品久久久久久久久久久不卡 | 日韩福利在线观看| 99re国产精品| 婷婷成人综合| av在线日韩| 成人免费一区| 国产精品白丝久久av网站| 天堂精品久久久久| 91成人网在线观看| 欧美综合另类| 亚洲www啪成人一区二区| 精品久久免费| 麻豆一区在线| 国产精品亚洲产品| 国产欧美日韩在线一区二区| 午夜电影一区| 亚洲免费福利一区| 免费看欧美美女黄的网站| 国产高清一区| 激情五月综合| av一区二区高清| 婷婷亚洲综合| 欧美日韩国产免费观看视频| 日韩在线观看一区| 国产不卡精品| 亚洲精品**中文毛片| 国产suv精品一区二区四区视频 | 欧美日韩一区二区综合| 日韩高清成人| 色在线视频观看| 高清不卡亚洲| 久久久久久美女精品| 亚洲91久久| 亚洲精品一区二区在线看| 亚洲婷婷在线| 欧美日韩四区| 丝袜亚洲另类欧美| 亚洲精品高潮| 97精品资源在线观看| 国产欧美日韩免费观看| 欧美精品aa| 精品久久久中文字幕| 五月激情久久| 九一精品国产| 综合国产精品| 91欧美极品| 国产精品视频首页| 精品一区二区三区中文字幕在线| 精品九九久久| 亚洲电影在线| 亚洲欧美久久久| 日精品一区二区三区| 国产精品分类| 福利一区二区免费视频| 高清一区二区| 亚洲不卡av不卡一区二区| 国产亚洲欧洲| 日韩高清电影免费| 精品一二三区| 久久九九99| 在线看片一区| 国产精品久久久久久模特| 国产精选在线| 伊人久久成人| 91九色综合| 97精品一区| 亚洲在线免费| 久久国产三级| 电影天堂国产精品| 麻豆亚洲精品| 国产精品115| 久久久亚洲一区| 亚洲深夜福利在线观看| 国产丝袜一区| 久久男女视频| 日韩在线电影| 精品视频自拍| 国产美女一区| 国产精品白丝一区二区三区| 日韩视频网站在线观看| 日韩在线一区二区| 国产精品tv| 精品日韩毛片| 久久国产欧美日韩精品| 日韩欧美不卡| 日本不卡视频在线| av资源亚洲| 日韩视频一二区| 国产一区精品福利| 免费一区二区视频| 国产精品久久久久久久久妇女| 国产精品腿扒开做爽爽爽挤奶网站| 国产精品xvideos88| 好吊日精品视频| 国产精品主播| 午夜国产精品视频| 久久成人高清| а√天堂中文在线资源8| 亚洲三级视频| 超碰在线99| 日韩不卡一区二区| 蜜臀91精品国产高清在线观看| 国产日韩欧美一区| 欧美/亚洲一区| 国产精品一级| 夜夜精品视频| 国产+成+人+亚洲欧洲在线| 综合激情网站| 成人午夜国产| 国产精品va| 日韩中文字幕1| 亚洲天堂一区二区| 久久国产欧美日韩精品| 99热精品在线观看| 国产乱码午夜在线视频| 日韩av一级片| 亚洲在线电影| 欧美日韩精品免费观看视完整| 日韩av不卡一区二区| 国产欧美日韩一区二区三区四区| 亚洲精品国产偷自在线观看| 成人在线丰满少妇av| 日本精品一区二区三区在线观看视频| 久久青草久久| 精品一区91| 日韩福利在线观看| 久久亚洲一区| 欧美成人精品| 五月激情久久| 国产一区二区精品久| 久久激情综合网| 亚洲欧洲免费| 尤物在线精品| 999久久久91| 久久精品免视看国产成人| 日本中文字幕一区二区视频| 悠悠资源网久久精品| 欧洲亚洲一区二区三区| 精品国产精品国产偷麻豆 | 在线亚洲观看| 三上悠亚国产精品一区二区三区 | 国产精成人品2018| 四虎精品一区二区免费| 99国产精品99久久久久久粉嫩| 日本综合字幕| 国产一区二区三区四区五区| 欧美日韩调教| 日韩午夜视频在线| 亚洲影视一区二区三区| 九色精品91| 欧美日韩一二三四| 日本精品影院| 日韩成人亚洲| 香蕉成人av| 偷拍精品精品一区二区三区| 欧美激情另类| 亚洲黄色中文字幕| 天堂√中文最新版在线| 精品日本视频| 精品视频一区二区三区四区五区 | 久久精品国产999大香线蕉| 久久精品99国产国产精| 日韩精品高清不卡| 亚洲一二av| 蜜臀久久久99精品久久久久久|