成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

MySQL CHAR和VARCHAR存儲、讀取時的差別

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

導讀

你真的知道CHAR和VARCHAR類型在存儲和讀取時的區別嗎?

還是先拋幾條結論吧:

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

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

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

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

下面是測試驗證過程。

1、測試CHAR類型

表結構:

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, ’’);

查看存儲結構:

(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

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

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

再看下讀取tchar表的結果:

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 | <- 刪除尾部空格,結果和id=5一樣| 5 | 000$$$ | 0 |+----+----------------------------+------------+

2、測試VARCHAR類型

表結構:

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, ’’);

查看存儲結構:

(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

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

再看下讀取tvarchar表的結果:

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

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

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

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

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

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

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

以上測試使用的版本及環境:

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存儲的差別的詳細內容,更多關于MySQL CHAR和VARCHAR的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久久久久**毛片大全| 欧美一区午夜精品| 欧美情侣在线播放| 亚洲影院理伦片| 伊人久久综合| 久久精品欧美一区二区三区不卡| 国产99久久久久| 欧美巨大另类极品videosbest | 亚洲午夜在线观看视频在线| 亚洲精选在线| 亚洲色欲色欲www在线观看| 欧美日韩一区综合| 欧美国产禁国产网站cc| 欧美在线网址| 中文字幕欧美国产| 欧美日韩四区| 国产精品福利电影一区二区三区四区| 91免费小视频| 久久久久久免费毛片精品| 91天堂素人约啪| 久久久久88色偷偷免费| av电影在线观看一区| 精品国产3级a| 99国产精品久久久久久久久久| 欧美一级二级在线观看| 国产99久久久久| 日韩免费视频线观看| 高清视频一区二区| 精品国产第一区二区三区观看体验| 99久久精品免费观看| 国产日韩成人精品| 欧美人与禽猛交乱配| 国产精品免费av| 伊人久久婷婷色综合98网| 夜夜亚洲天天久久| 久久伊人一区二区| 蜜臀a∨国产成人精品| 久久久久久久波多野高潮日日| 亚洲高清免费视频| 色爱区综合激月婷婷| 精品一区二区久久| 精品精品国产高清一毛片一天堂| 91色porny| 亚洲少妇最新在线视频| 噜噜噜躁狠狠躁狠狠精品视频| 日韩精彩视频在线观看| 欧美日韩国产色站一区二区三区| 国产高清不卡二三区| 久久久久久影视| 亚洲欧洲三级| 午夜精品久久久久久久蜜桃app| 91行情网站电视在线观看高清版| 麻豆精品国产91久久久久久| 欧美精品久久99| 国产成人精品1024| 亚洲国产激情av| 99在线精品免费视频九九视 | 精品国产3级a| 亚洲黄色在线| 日本sm残虐另类| 日韩一区二区高清| 欧美精品一区二区三区在线看午夜 | 成熟亚洲日本毛茸茸凸凹| 久久精品一区二区三区四区| 在线欧美日韩| 日韩成人av影视| 日韩欧美一二区| 一色屋精品视频在线看| 日本成人在线一区| 91精品国产综合久久婷婷香蕉| 91在线观看成人| 一区二区三区视频在线看| 欧美三级日韩三级| 不卡av电影在线播放| 亚洲日本在线视频观看| 色综合久久久网| 成人激情av网| 亚洲综合视频在线观看| 欧美日本一道本在线视频| 91色乱码一区二区三区| 日韩专区中文字幕一区二区| 欧美不卡123| 国产精品久久久对白| 国产在线播精品第三| 国产精品国产三级国产专播品爱网| 91久久久免费一区二区| 99久久精品国产麻豆演员表| 亚洲一区二区三区四区五区中文| 欧美男生操女生| 在线播放不卡| 国产美女av一区二区三区| 中文字幕综合网| 欧美精品高清视频| 一本色道久久综合亚洲二区三区| 九九国产精品视频| 国产精品美女久久久久aⅴ| 欧洲精品视频在线观看| 牛夜精品久久久久久久99黑人 | 日韩电影免费在线| 国产日产欧美一区二区视频| 欧美性视频一区二区三区| 91玉足脚交白嫩脚丫在线播放| 天天操天天综合网| 国产亚洲1区2区3区| 91久久人澡人人添人人爽欧美| 91女神在线视频| 久久国产福利国产秒拍| 国产精品久久久久影院色老大| 欧美色成人综合| 狠狠色噜噜狠狠狠狠色吗综合 | 欧美肥大bbwbbw高潮| 亚洲精品影院| 成人精品视频网站| 亚洲午夜在线观看视频在线| 国产夜色精品一区二区av| 欧美视频一区二区三区四区| 亚洲成人中文| 成人av影院在线| 青草国产精品久久久久久| 中文字幕日韩av资源站| 欧美一区二区三区四区视频| 新狼窝色av性久久久久久| 91碰在线视频| 国产高清无密码一区二区三区| 亚洲一区二区三区四区在线免费观看 | 老司机精品福利视频| 韩国一区二区三区美女美女秀| 国产精品一二三四| 婷婷丁香久久五月婷婷| 国产精品家庭影院| www国产成人免费观看视频 深夜成人网| 色婷婷综合久久久久中文一区二区| 欧美日韩ab| 国产精品1024| 奇米色一区二区| 一区二区三区精品| 一区在线播放视频| 亚洲精品一区二区三区四区高清 | 亚洲小说欧美另类社区| av一区二区三区在线| 国产一区二区三区av电影| 亚洲a一区二区| 亚洲欧洲精品一区二区精品久久久| 日韩一本二本av| 欧美午夜精品理论片a级按摩| 国产婷婷精品| 亚洲二区在线| 午夜电影亚洲| 成人av在线电影| 夫妻av一区二区| 国产福利一区在线观看| 免费欧美日韩国产三级电影| 一区二区三区四区乱视频| 亚洲欧洲无码一区二区三区| 久久青草欧美一区二区三区| 日韩精品中文字幕在线不卡尤物 | 成人精品国产一区二区4080| 国产一区二区三区精品欧美日韩一区二区三区| 视频一区二区国产| 亚洲制服丝袜av| 最新久久zyz资源站| 久久久久97国产精华液好用吗| 日韩一区二区三区电影| 欧美日韩国产a| 欧美三级午夜理伦三级中视频| 久久野战av| 久久久久se| 久久一二三区| 91久久香蕉国产日韩欧美9色| 美日韩在线观看| 鲁大师影院一区二区三区| 亚洲一区欧美激情| 国产亚洲激情| 国产精品综合| 国产精品免费一区二区三区在线观看| 亚洲精品美女| 一本综合久久| 一区二区黄色| 国产日本精品| 一本久道久久综合狠狠爱| 最新国产拍偷乱拍精品| 日韩亚洲不卡在线| 中文精品视频一区二区在线观看| 国产欧美一区二区三区另类精品| 国产亚洲第一区| 香蕉精品999视频一区二区| 先锋影音久久久| 色婷婷精品大在线视频| 欧美影片第一页| 欧美日韩久久一区| 911精品国产一区二区在线| 欧美丰满少妇xxxxx高潮对白| 3d动漫精品啪啪一区二区竹菊 | 日韩视频在线观看国产| 国产精品日本| 色综合久久99| 欧美日韩三级在线| 3d动漫精品啪啪一区二区竹菊| 欧美一区二区人人喊爽| 久久人人97超碰com|