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

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

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

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

導讀

你真的知道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 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列在讀取時會去掉尾部空格,除非設置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時會顯示空格。

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

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

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

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

巨人網絡通訊聲明:本文標題《MySQL CHAR和VARCHAR存儲、讀取時的差別》,本文關鍵詞  MySQL,CHAR,和,VARCHAR,存儲,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL CHAR和VARCHAR存儲、讀取時的差別》相關的同類信息!
  • 本頁收集關于MySQL CHAR和VARCHAR存儲、讀取時的差別的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美一区二区久久| 成人免费视频caoporn| 国产精品热久久久久夜色精品三区| 同产精品九九九| 国产精品一级片| 精品区一区二区| 亚洲va天堂va国产va久| av色综合久久天堂av综合| 欧美成人一区二区三区在线观看| 亚洲欧洲性图库| 一本到高清视频免费精品| 久久你懂得1024| 国产精品自在在线| 久久久精品免费观看| 国内成人免费视频| 久久嫩草精品久久久久| 久久99热99| 国产日韩欧美一区二区三区综合| 国产真实乱偷精品视频免| 欧美激情一区二区三区不卡| 国内一区二区在线| 国产日韩精品久久久| 粉嫩久久99精品久久久久久夜| 国产精品看片你懂得| 日本精品视频一区二区| 亚洲成av人综合在线观看| 91精品国产麻豆国产自产在线| 免费日韩伦理电影| 国产精品国产三级国产专播品爱网 | 精品国产乱码久久久久久免费| 久久97超碰国产精品超碰| 国产精品麻豆欧美日韩ww| 欧美精品一级二级三级| 国产成人综合精品三级| 天堂在线一区二区| 中文字幕综合网| 久久久精品黄色| 日韩无一区二区| 欧美性色黄大片| 91免费版在线| 不卡视频一二三四| 美女一区二区在线观看| 亚洲综合av网| 亚洲成av人片在线观看| 亚洲欧美另类久久久精品| 国产精品色噜噜| 国产精品美女久久久久av爽李琼| 欧美中文字幕一区| 欧美午夜精品久久久久久超碰| 国产999精品久久久久久| 免费在线观看一区二区三区| 日韩va亚洲va欧美va久久| 五月综合激情日本mⅴ| 亚洲一区在线观看网站| 亚洲国产精品久久人人爱蜜臀| 一区二区三区欧美视频| 香蕉久久夜色精品国产使用方法 | 8x福利精品第一导航| 国产精品伊人色| 成人av资源网站| 欧美性猛片aaaaaaa做受| 欧美日韩国产小视频在线观看| 成人免费看黄yyy456| av色综合久久天堂av综合| 日本精品一级二级| 欧美成人性福生活免费看| 欧美不卡一区二区三区四区| 国产精品高清亚洲| 午夜影院在线观看欧美| 大陆成人av片| 91麻豆精品国产91久久久久久 | 黄页网站大全一区二区| 色婷婷综合久色| 国产亚洲欧美在线| 日韩成人精品在线| 欧洲激情一区二区| 国产精品九色蝌蚪自拍| 国产一区二区三区香蕉| 欧美一区二区三区人| 亚洲aaa精品| 91成人免费网站| 亚洲欧洲成人精品av97| 亚洲青青青在线视频| 欧美乱妇23p| 中文字幕精品综合| 亚洲精品一区二区三区影院| 欧美性xxxxxxxx| 成人黄色免费短视频| 国产一区二区h| 国产日韩精品一区| 亚洲激情图片小说视频| 日韩欧美中文字幕精品| 91精品免费在线| 视频一区二区中文字幕| 国内精品不卡在线| 国产亚洲制服色| 国产精品一二三四| 亚洲天堂福利av| 欧美丝袜自拍制服另类| 日本在线不卡一区| 精品对白一区国产伦| 成人亚洲一区二区一| 一区二区三区资源| 日韩午夜激情av| 91丨porny丨在线| 国产乱国产乱300精品| 国产大陆亚洲精品国产| av一区二区不卡| 亚洲第一久久影院| 久久―日本道色综合久久| 欧美色图在线观看| 91亚洲国产成人精品一区二区三| 视频在线观看国产精品| 国产精品成人免费在线| 精品国产一区二区三区四区四 | 4438x成人网最大色成网站| 夫妻av一区二区| 国产在线不卡一区| 久久丁香综合五月国产三级网站| 亚洲日本在线天堂| 中文一区在线播放| 国产精品情趣视频| 国产精品激情偷乱一区二区∴| 精品国产乱码久久久久久老虎| 欧美男同性恋视频网站| 欧美日韩一级片在线观看| 色嗨嗨av一区二区三区| 色婷婷综合久久久中文一区二区| 波多野结衣精品在线| 精品国产一区二区三区忘忧草| 粉嫩高潮美女一区二区三区| 亚洲1区2区3区4区| 亚洲国产精品天堂| 男男视频亚洲欧美| a亚洲天堂av| 5月丁香婷婷综合| 国产视频一区在线播放| 亚洲综合色噜噜狠狠| 亚洲成人av资源| 国产福利一区二区| 欧美日韩中文精品| 国产日韩欧美不卡在线| 国产成+人+日韩+欧美+亚洲| 蜜臀久久99精品久久久久宅男| 国产黄色91视频| 在线观看av一区二区| 欧美精品一区二区久久婷婷| 亚洲电影你懂得| 99精品欧美一区二区三区综合在线| 色94色欧美sute亚洲13| 日韩欧美一级特黄在线播放| 一区二区三区蜜桃| 成人永久aaa| 久久午夜羞羞影院免费观看| 亚洲精品高清在线| 色婷婷久久一区二区三区麻豆| 免费高清不卡av| 国产激情一区二区三区| 日韩限制级电影在线观看| 亚洲一区成人在线| 欧美亚洲动漫精品| 一区二区三区成人在线视频 | av在线不卡网| 欧美电影免费观看高清完整版 | 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩另类一区| 精品国产欧美一区二区| 91美女片黄在线观看| 国产精品国产三级国产aⅴ中文| 激情深爱一区二区| 国产精品美女www爽爽爽| 99精品欧美一区二区蜜桃免费 | 色婷婷av一区二区三区之一色屋| 国产精品三级av在线播放| 高清不卡一区二区在线| 国产清纯美女被跳蛋高潮一区二区久久w | 丁香天五香天堂综合| 亚洲少妇30p| 91精品国产一区二区三区香蕉| 免费在线观看一区二区三区| www亚洲一区| 777午夜精品视频在线播放| 成人午夜激情片| 日本在线播放一区二区三区| 国产精品久久久久影院亚瑟 | 91视视频在线观看入口直接观看www | 欧美一级一区二区| av一区二区三区在线| 国产一区二区视频在线| 裸体一区二区三区| 亚洲黄色片在线观看| 欧美国产精品v| 26uuu精品一区二区在线观看| 色欧美乱欧美15图片| 三级成人在线视频| 香蕉成人伊视频在线观看| 国产精品久久夜| 亚洲国产精品精华液ab| 精品国产免费视频| 久久精品人人爽人人爽|