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

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

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

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

導(dǎo)讀

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

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

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

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

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

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

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

1、測(cè)試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, ’’);

查看存儲(chǔ)結(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觀察利器。

可以看到,無論我們存儲(chǔ)多長(zhǎng)的字符串進(jìn)去,每條記錄實(shí)際都是占用43(169-126=43)字節(jié)。由此結(jié)論1成立。簡(jiǎn)單說下,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、測(cè)試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, ’’);

查看存儲(chǔ)結(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那條記錄一樣)。對(duì)上面這個(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é)(沒有額外存儲(chǔ)字符串的字節(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類型列看起來像是在存儲(chǔ)時(shí)把空格給吃了,但實(shí)際上只是在讀取時(shí)才給吃了(顯示層面上把空格刪除了)。2、從讀取的結(jié)果來看,VARCHAR類型列看起來像是反倒保留了多余的空格,實(shí)際上也是只在讀取時(shí)才恢復(fù)這些空格(但實(shí)際物理存儲(chǔ)時(shí)還是會(huì)刪掉這些空格)。

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

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

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

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

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

以上測(cè)試使用的版本及環(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存儲(chǔ)的差別的詳細(xì)內(nèi)容,更多關(guān)于MySQL CHAR和VARCHAR的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品aa| 香蕉精品久久| 视频一区二区欧美| 亚洲精品a级片| 亚洲国产一区二区三区在线播放| 老牛影视精品| 欧美交a欧美精品喷水| 精品视频网站| 亚洲三级欧美| 免费国产自久久久久三四区久久| 亚洲免费影视| 综合国产精品| 国产视频一区二区在线播放| 久久av免费| а√天堂8资源中文在线| 久久久精品午夜少妇| 午夜免费一区| 在线国产日韩| 国产日韩一区二区三免费高清 | 亚洲香蕉视频| 欧美私人啪啪vps| 成人国产精品久久| 91精品亚洲| 久久亚洲国产精品一区二区| 日韩av在线播放中文字幕| 久久久免费人体| 99久久夜色精品国产亚洲狼| 在线午夜精品| 国产精品久久久久久模特| 毛片在线网站| 日韩精品一级中文字幕精品视频免费观看 | 国产精品欧美一区二区三区不卡| 久久久久97| 亚洲成人va| 久色成人在线| 国产精品久久久久久久久久久久久久久 | 日本在线成人| 国内精品伊人| 欧美a级片一区| 免费的成人av| 国产精品igao视频网网址不卡日韩| 高清不卡一区| 石原莉奈在线亚洲二区| 久久精品一区| 久久不射中文字幕| 久久精品资源| 亚洲欧美日韩国产| 欧美激情综合| 日韩一区二区免费看| 国产毛片一区二区三区 | 国产一区精品福利| 在线亚洲国产精品网站| 国产免费av国片精品草莓男男| 久久蜜桃精品| 国产精品sss在线观看av| re久久精品视频| 久久中文在线| 亚洲精品美女91| 亚洲www啪成人一区二区| 日产欧产美韩系列久久99| 日韩不卡免费高清视频| 日韩高清一区在线| 亚洲二区视频| 欧美国产日本| 亚洲一级大片| 亚洲香蕉网站| 国产不卡精品在线| 日韩一区二区三区免费视频| 精品捆绑调教一区二区三区| 欧美一级网址| 欧洲毛片在线视频免费观看| 国产一区二区三区四区| 日韩欧美高清一区二区三区| 久久理论电影| 国产va免费精品观看精品视频| 婷婷五月色综合香五月| 欧美日韩一区二区综合| 久久免费福利| 青青草精品视频| 先锋影音国产一区| 久久精品电影| 国产精品.xx视频.xxtv| 蜜臀国产一区二区三区在线播放| av中文字幕在线观看第一页 | 国产精品啊v在线| 麻豆9191精品国产| 亚洲韩日在线| av高清不卡| 久久国产精品美女| 四虎精品一区二区免费| 视频一区中文| 日韩精品水蜜桃| 国产在线不卡一区二区三区| 91久久精品无嫩草影院| 久久高清国产| 欧美日韩国产精品一区二区亚洲| 精品一区二区三区视频在线播放| 日韩av网站在线免费观看| 国产色综合网| 在线看片不卡| 亚洲夜间福利| 久久在线免费| 午夜影院一区| 人人草在线视频| 97人人精品| 都市激情国产精品| 91综合视频| 91日韩欧美| 超碰99在线| 亚洲精品永久免费视频| 中文字幕在线官网| 精品免费在线| 国产在线一区不卡| 精品一区二区三区亚洲| 欧美91在线|欧美| 欧美激情日韩| 精品日本视频| 97精品97| 久久久久99| 精品欧美久久| 久久国产99| 亚洲男人在线| 人人精品久久| 国产欧美久久一区二区三区| 国产精品乱战久久久| 麻豆精品视频在线| 久久伊人亚洲| 欧洲精品一区二区三区| 成人精品天堂一区二区三区| 天堂日韩电影| 亚洲精品一二三区区别| 国产精品三上| 亚洲精品第一| 久久激情五月婷婷| 卡一精品卡二卡三网站乱码| 国产a久久精品一区二区三区| 91视频久久| 精品一区在线| 亚洲区国产区| 国产精品久久久久77777丨| 久久在线91| 水蜜桃久久夜色精品一区| 欧美三区四区| 欧美日韩国产一区精品一区| 亚洲一区中文| 日本中文字幕一区二区视频 | 日韩不卡在线观看日韩不卡视频| 欧美日韩夜夜| 日韩av有码| 日韩视频一区二区三区在线播放免费观看| 久久xxxx| 国产毛片一区二区三区 | 久久久精品网| 91久久中文| 日本欧美韩国一区三区| 美女国产精品久久久| 日韩精品免费一区二区三区| 午夜在线精品偷拍| 国产日本精品| 中文在线免费视频| 99在线|亚洲一区二区| 日韩黄色在线观看| 国产欧洲在线| 在线国产精品一区| 精品免费视频| 亚洲欧美日韩国产| 久久av偷拍| 免费成人网www| 最新国产精品视频| 久久精品人人| 麻豆9191精品国产| 国产精品jk白丝蜜臀av小说| 久久国产影院| 国产亚洲久久| 国精品一区二区三区| 日韩欧美久久| 久久婷婷一区| 欧美在线看片| 久久精品动漫| 欧美日韩亚洲三区| 亚洲国内精品| 国产精品毛片视频| 日韩视频中文| 久久一区亚洲| 亚洲午夜免费| 久久久夜精品| 国产精品任我爽爆在线播放| 成人av二区| 激情不卡一区二区三区视频在线| 一区在线视频观看| 成人在线视频区| 日本在线不卡视频一二三区| 日韩电影在线视频| 亚洲精品三级| 香蕉久久精品| 美腿丝袜在线亚洲一区| 爽爽淫人综合网网站| 日韩精品电影| 久久国产精品色av免费看| 国产精品嫩草99av在线|