婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL CHAR和VARCHAR存儲、讀取時的差別

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

熱門標簽:日照旅游地圖標注 百度地圖圖標標注中心 石家莊電商外呼系統(tǒng) 芒果電話機器人自動化 信陽穩(wěn)定外呼系統(tǒng)運營商 廣東人工電話機器人 申請外呼電話線路 湖南人工外呼系統(tǒng)多少錢 南通自動外呼系統(tǒng)軟件

導讀

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

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

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

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

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

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

下面是測試驗證過程。

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

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

可以看到,無論我們存儲多長的字符串進去,每條記錄實際都是占用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é);因為是CHAR類型,還需要額外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那條記錄一樣)。
對上面這個結(jié)果有點詫異是不是,尤其是id=1的記錄(插入的是'a…后面19個空格'),居然也要消耗43字節(jié),這就佐證了上面的結(jié)論2。
同樣的,id=3和id=4這兩條記錄都是占用24字節(jié),而id=5和id=6這兩條記錄都是占用23字節(jié)(沒有額外存儲字符串的字節(jié)數(shù),只有id列4個字節(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類型列看起來像是在存儲時把空格給吃了,但實際上只是在讀取時才給吃了(顯示層面上把空格刪除了)。
2、從讀取的結(jié)果來看,VARCHAR類型列看起來像是反倒保留了多余的空格,實際上也是只在讀取時才恢復這些空格(但實際物理存儲時還是會刪掉這些空格)。

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

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

When CHAR values are retrieved, trailing spaces are removed unless the
PAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.
簡言之,CHAR列在讀取時會去掉尾部空格,除非設(shè)置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, in
conformance with standard SQL. 簡言之,讀取VARCHAR時會顯示空格。

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

mysql> select version()\G
...
version(): 8.0.15

mysql> select @@sql_mode\G
...
@@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存儲的差別的詳細內(nèi)容,更多關(guān)于MySQL CHAR和VARCHAR的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL CHAR和VARCHAR該如何選擇
  • Mysql中varchar類型一些需要注意的地方
  • MYSQL中 char 和 varchar的區(qū)別
  • MySQL中字段類型char、varchar和text的區(qū)別
  • mysql varchar類型求和實例操作
  • 對比MySQL中int、char以及varchar的性能
  • MySQL動態(tài)修改varchar長度的方法
  • Mysql中varchar長度設(shè)置方法
  • Mysql數(shù)據(jù)庫中把varchar類型轉(zhuǎn)化為int類型的方法
  • mysql如何處理varchar與nvarchar類型中的特殊字符
  • 當面試官問mysql中char與varchar的區(qū)別

標簽:阿里 合肥 沈陽 呼和浩特 天津 牡丹江 公主嶺 惠州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《MySQL CHAR和VARCHAR存儲、讀取時的差別》,本文關(guān)鍵詞  MySQL,CHAR,和,VARCHAR,存儲,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL CHAR和VARCHAR存儲、讀取時的差別》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL CHAR和VARCHAR存儲、讀取時的差別的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人精品免费视频网站| 久久青草欧美一区二区三区| 亚洲精品综合在线| 99久久精品国产观看| 国产精品超碰97尤物18| 不卡的av网站| 一区二区三区在线观看视频| 色94色欧美sute亚洲线路一ni| 一区二区三区四区不卡在线| 欧美日韩精品福利| 久久福利资源站| 久久免费国产精品| 91美女在线看| 婷婷六月综合亚洲| 久久综合九色综合欧美98| 成人黄色综合网站| 亚洲永久精品国产| 欧美不卡一区二区三区| 国产成人在线观看| 亚洲一区二区影院| 日韩视频一区二区三区| 粉嫩欧美一区二区三区高清影视| 亚洲精品成人a在线观看| 7777精品伊人久久久大香线蕉的| 久久国产生活片100| 美女看a上一区| 中文字幕av一区 二区| 欧美亚洲综合另类| 黄色精品一二区| 2023国产精品自拍| 色94色欧美sute亚洲线路一久 | 中文字幕一区二区三区不卡| 91麻豆福利精品推荐| 青青草原综合久久大伊人精品| 国产精品日韩精品欧美在线| 欧美少妇一区二区| 国产乱人伦偷精品视频不卡| 一区二区免费在线| 久久久久久久久久久久久夜| 91精品福利在线| 国产精品亚洲一区二区三区在线 | 国产剧情在线观看一区二区| 亚洲在线观看免费视频| 国产午夜一区二区三区| 337p亚洲精品色噜噜噜| 色先锋资源久久综合| 韩国av一区二区三区| 亚洲一二三级电影| 欧美激情在线免费观看| 欧美一区二区观看视频| 精品视频一区二区三区免费| 不卡的av中国片| 国产成人a级片| 奇米四色…亚洲| 五月天中文字幕一区二区| 国产精品国产三级国产aⅴ中文| 日韩欧美国产一区二区三区 | 欧美一区二区三区四区在线观看| 97久久精品人人澡人人爽| 国产精品白丝jk白祙喷水网站| 在线观看欧美精品| 丁香亚洲综合激情啪啪综合| 黄色精品一二区| 日韩高清在线不卡| 亚洲福中文字幕伊人影院| 综合久久久久综合| 国产精品国产三级国产a| 国产视频一区在线观看| www国产成人免费观看视频 深夜成人网| 欧美日韩精品一区二区三区蜜桃| 色婷婷av一区二区三区大白胸| 国产在线精品一区二区夜色| 久久综合综合久久综合| 日韩av网站在线观看| 麻豆免费看一区二区三区| 青青草成人在线观看| 免费在线观看视频一区| 免费在线观看日韩欧美| 蜜臀av亚洲一区中文字幕| 七七婷婷婷婷精品国产| 另类小说欧美激情| 久久激情五月激情| 国产在线不卡一区| 国产福利一区二区| eeuss鲁片一区二区三区在线看| 成年人国产精品| 日本视频免费一区| 韩国女主播一区| 成人动漫一区二区三区| 色综合久久久久久久久久久| 日本高清成人免费播放| 3d动漫精品啪啪一区二区竹菊| 欧美一二三四在线| 久久久三级国产网站| 国产精品视频观看| 一区二区三区在线观看视频| 图片区小说区区亚洲影院| 秋霞午夜鲁丝一区二区老狼| 国产一本一道久久香蕉| 成人av在线看| 欧美视频在线观看一区| 日韩欧美色综合| 国产精品乱人伦中文| 亚洲超碰97人人做人人爱| 久久国产尿小便嘘嘘| 日韩久久免费av| 久久这里只精品最新地址| 亚洲国产精华液网站w| 亚洲成年人影院| 狠狠色狠狠色合久久伊人| 成人综合婷婷国产精品久久免费| 色婷婷综合久久久| 欧美mv日韩mv国产网站| 亚洲色图.com| 麻豆91在线播放免费| 99久久精品99国产精品| 91精品国产综合久久香蕉麻豆| 国产午夜一区二区三区| 亚洲国产综合在线| 粉嫩av亚洲一区二区图片| 欧美老肥妇做.爰bbww视频| 久久精品人人爽人人爽| 亚洲h在线观看| 成人h动漫精品一区二区| 日韩一区二区三区电影在线观看| 国产精品免费视频观看| 亚洲成va人在线观看| 丰满少妇久久久久久久| 日韩免费性生活视频播放| 亚洲精品中文字幕在线观看| 黄色成人免费在线| 制服.丝袜.亚洲.中文.综合| 国产精品久久久久影院老司 | 五月天久久比比资源色| 处破女av一区二区| 日韩精品一区在线观看| 一区二区三区欧美激情| 国产成人综合网| 日韩欧美一级精品久久| 亚洲v中文字幕| 99re8在线精品视频免费播放| 久久久亚洲午夜电影| 日本va欧美va瓶| 欧美色手机在线观看| 亚洲美女视频在线观看| 国产精品综合二区| 精品久久99ma| 美女视频一区在线观看| 欧美性高清videossexo| 亚洲激情自拍视频| 一本一道久久a久久精品| 国产精品国产自产拍在线| 国产成人综合亚洲91猫咪| 日韩1区2区3区| 欧美日韩一级大片网址| 亚洲综合男人的天堂| 99久久精品国产观看| 国产精品国产三级国产| 国产成人精品一区二| 国产拍揄自揄精品视频麻豆| 国产一区视频在线看| 久久这里只有精品首页| 激情综合色综合久久综合| 欧美草草影院在线视频| 狠狠色综合色综合网络| 国产欧美日韩在线看| 岛国一区二区三区| 亚洲乱码国产乱码精品精98午夜| 色综合咪咪久久| 亚洲国产你懂的| 日韩欧美一区在线观看| 精品一区二区三区免费观看 | 亚洲三级电影网站| 97精品视频在线观看自产线路二| 日韩一区在线免费观看| 色先锋久久av资源部| 亚洲影视在线观看| 69久久99精品久久久久婷婷| 久久精品久久精品| 久久综合久久鬼色中文字| 国产成人在线网站| 亚洲天堂免费在线观看视频| 日本久久一区二区三区| 日韩福利视频网| 久久香蕉国产线看观看99| 不卡视频在线看| 亚洲成av人片一区二区| 精品国产凹凸成av人网站| 成人小视频免费观看| 亚洲制服丝袜在线| 日韩免费观看2025年上映的电影| 国产成人免费在线观看| 亚洲综合无码一区二区| 久久综合一区二区| 成人av资源网站| 男男视频亚洲欧美| 中文字幕制服丝袜成人av| 欧美日韩一区二区不卡| 国产在线日韩欧美| 亚洲成在人线免费|