亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费

您好,歡迎訪(fǎng)問(wèn)天津九安特機電工程有限公司!

13383756132

全國咨詢(xún)熱線(xiàn)

您現在所在位置: 主頁(yè) >

MYSQL中char和varchar的區別

更新時(shí)間:2026-05-05 01:32:48

這篇文章主要介紹了MYSQL中 char 和 varchar的區別,幫助大家更(geng)好的理解和使用M(′?_?`)y??SQL數(???)據庫,感興趣的朋友可以了解下

CHAR和VARCHAR類(lèi)型相似,差別主要在存儲,尾隨空格和檢索方式上。

CHAR和VARCHAR相同的是:CHAR和VARCHAR都指定了字符長(cháng)ヽ(′▽?zhuān)?ノ度,注┐(′д`)┌意是字符長(cháng)度。例如char(30) 和 varchar(30)表示都可以存30個(gè)字符。有一點(diǎn)(′?`*)要注意的是在utf8mb4編碼中,每個(gè)字符占4個(gè)節點(diǎn)。在utf8中,每個(gè)字符占3個(gè)字節。當要存儲的字符超過(guò)CHAR/VARCHAR指定的最大長(cháng)度。在sql mode 沒(méi)開(kāi)啟的時(shí)候是截斷要存儲的字串,只存儲前30位(wei)

CHAR列中的值是定長(cháng)的字符串。長(cháng)度可以指定為0到255個(gè)字符(例如ヽ(′?`)ノutf8mb4: 0-255*4個(gè)字節)之間的?值當使用CHAR存儲字符時(shí),以C??HAR(30)為例,不夠30個(gè)字符的以空格向右填充。當檢索CHAR值時(shí),除非啟用sqヽ(′ー`)ノlmode:PAD_CHAR_(T_T)TO_FULL-LENGTH SQL模式,否則將刪除尾??部空格。

VARCHAR列中的值是可變長(cháng)度的字符串。長(cháng)度可以指(T_T)定為0到65535字節之間的值。VARCHAR的有效最大長(cháng)度取決于最大行大?。?5535字節,在所有列之間共享)和使用的字符集

與CHAR不同的是,VARCHAR在存儲數據的時(shí)候,會(huì )額外存儲存儲1-2個(gè)字節(例如varchar(4),這1-2??個(gè)字節長(cháng)度不會(huì )(hui)算在這4個(gè)字符長(cháng)度里面,不用擔心被截斷),這1-??2個(gè)字節用來(lái)記錄數據字符的長(cháng)度。假如數據字符長(cháng)度小于(yu)等于255,則使用1個(gè)字節(jie)記錄數據長(cháng)度。大于則用兩個(gè)字節。CHAR只存儲數據本身。如下圖所示。

(誤區:varc???ha??r在查詢(xún)時(shí)比char慢是因為會(huì )計算varchar的??字節(jie)長(cháng)度(X))

在l(??ヮ?)?*:???atin1編碼中,Latin1不能存中文。英文字母為1個(gè)字節。

需要注意的是VARCHAR值在存儲時(shí)不填充空格。在存儲和檢索值時(shí),尾部空格將被保留,這與標準SQL一致。而CHAR則相反,CHAR在儲存時(shí)(shi)會(huì )填充空格,在檢索時(shí)尾部空格會(huì )去掉,無(wú)論這個(gè)尾部空格是自動(dòng)填充的還是數據本身的。舉個(gè)例子:

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO vc VALUES ('ab ', 'ab ');
Query OK, 1 ro??w affe??cted (0.00 sec)

mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+-------------ヽ(′?`)ノ--------+-(°ロ°) !--------------------+
| (ab ) | (ab) |
+---------------------+---------------------+
1 row in se??t (0.06 sec)


做三個(gè)實(shí)驗。

mysql> sho(′ω`*)w create table vc;
+-------+---------------------------------------??--(???)------------------------( ?° ?? ?°)-------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------(′?`)---------??--------------------------(╯‵□′)╯-----------------------------------------------------------------------(???)------------------------------------+
| vc | CREATE TABLE `vc` (
`v` varchar(4) DEFAULT NULL,
`c` char(4) DEFAULT NULL,
UNIQUE KEY `v_UNIQUE` (`v`)
)ヽ(′ー`)ノ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+------------------------??-----------------------------------??-------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

1(/ω\).查詢(xún)語(yǔ)句 where 字段=' ab';

mysql> SELECT conc(′▽?zhuān)?)at('(',v, ')'),concat((′_`)'(',c, ')') FROM vc where v=' ab';
Empty set (0.00 sec)

mysql> SELECT concat('(',v, ')'),(′_`)concat('(',c, ')') FROM vc where c=' ab';
Empty set (0(′ω`).00 sec)

2.查詢(xún)語(yǔ)句 where 字段='ab ';

mysql> SELECT concat('(',v, ')'),concat('(',c, ')') FROM vc wher(′;ω;`)e v='a(??ヮ?)?*:???b ';
+-------ヽ(′▽?zhuān)?ノ-------------+-----------??---------+
| concat('(',v, ')') | concat('(',c, ')') |
+--------------------??+------??--------------+
| (ab ) | (ab) |
+--------------------+--------------------+
1 row in set (0.00 sec)

mysql> SELECT conc??at('(',v, ')'(???)),concat('(',c, ')') FROM vc where c='ab ';
+--------------------+--------------------??+
| concat('(',v, ')') | concat('(',c, ')') |
+--(╯‵□′)╯------------------+--------------------+
| (ab ) | (ab) |
+------??-----------(◎_◎;)---+--------------------+

1 row in set (0.00 sec)


在??所有字符串的比較中,不論是varchar,text,char 都會(huì )忽略去掉尾部??空格,除了like子句,like子句不會(huì )去掉??尾部空格如下所示

mysql> SELEC(◎_◎;)T concat('(',v, ')'),concat('(',c, ')') FROM vipshop_dba.vc where c liヽ(′ー`)ノke 'ab'; (無(wú)尾部空格)
+--------------------+--------------------+
| concat('(',v,ヽ(′ー`)ノ ')') | concat('(',c, ')') |
+--------------------+---------ヽ(′▽?zhuān)?ノ-----------+
| (ab ) | (ab) |
| ( ab ) | (a(′?_?`)b) |
+--------------------+--------------------+
2 rows in set (0??.00 sec)

mysql> SELECT con??cat('(',v, ')'),concat('(',c, ')'??) FROM vipshop_dba.vc where c like 'ab '; (有尾部空格)
Empty set (0.00 sec)



CHAR在儲存時(shí)會(huì )填充空格,在檢索時(shí)尾部空格會(huì )去掉,無(wú)論這個(gè)尾部空格是自動(dòng)填充的還是數據本身的。這個(gè)去掉ヽ(′ー`)ノ尾部空格的動(dòng)作在比較之前會(huì )發(fā)生



mysql>(′▽?zhuān)?); SELECT concat('(',v, ')'),concat('(',c, ')') FROM vipshop_dba.vc where v like 'ab '; (有??尾部空格)
+--------------------+--------------------+
| concat('(',v, ')') | concat('(',c, ')') |
+----------------??----+--------------------+
| (ab ) | (ab) |
+(′▽?zhuān)?-----------------??---+--------------------+
1 row in set (0.01 sec)

mysql> SELECT concat('(',v, ')'),??concat('(',c, ')') FROM vipshop_dba.vc where v like 'ab'; (無(wú)尾部空格)
Empty set (0.00 sec)

3.varchar 設置unique 索引 觀(guān)察 'ab' 和 'ab '是否同時(shí)能存在

mysql> insert into vc (v,c)val??(/ω\)ues('ab ', 'ab ')
-> ;
ERROR 1062 (23000): Duplicate entry 'ab ' for key 'v_UNIQUE'
mysql> insert into vc (v,c)values(' ab ', 'ab ')
-> ;
Query OK, 1 row affected, 1 warning (0.00 sec)
說(shuō)明雖然varchar 尾部空格可以保留,但是索引上似乎額外做了限制。如果varch??ar是唯一索引,插入的值區別只在(zai)于尾部空格的數量的話(huà)則會(huì )報 Duplic??ate key

說(shuō)到字節(′ω`)限制這個(gè)問(wèn)題,也(?Д?)想提醒一下。索引長(cháng)度???也是有限制的??噢:

innodb引擎的每個(gè)索引列長(cháng)度限制為767字節(bytes),所有組成索引列的長(cháng)度和不能大于3072字節。注意是字節,varchar(256)在不同的編碼字節計算不( ?ヮ?)同。例如在utf8mb4中,一個(gè)字符占4個(gè)字節,256個(gè)字符=1024個(gè)字節。就(?????)達不到索引覆蓋??的效果噢。相當于只做了一個(gè)前綴索引(非常重要,??前綴索引是需要回(主鍵)表的,二次查詢(xún))

innodb引擎可以通過(guò)配??置innodb_large_prefix=on(全局參數,動(dòng)態(tài)生效)來(lái)讓單個(gè)索引列長(cháng)度限制上升到3072字節

在MySQL5.7里默認 innodb_large_prefix=1 解除了767bytes長(cháng)度限制,但是單列索引長(cháng)度最大還是不能超過(guò)3072bytes

在MySQL5.6里默認 innodb_large_prefix=0 限制單列索引長(cháng)度不能超過(guò)767bytes。需要設置innodb_large_prefix=ON、innodb_file_format=barracuda、inn??odb_file_per_table=ON ,且Innodb表的存儲格式為 DYNAMIC 或 COMPRESSED,則前綴索引最多可包含3072個(gè)字節

以上就是MYSQL中 char 和 varchar的區別的詳細ヾ(^-^)ノ內容,更多關(guān)于MYSQL char 和 varchar的資料請關(guān)注腳本之家其它相關(guān)文章!

來(lái)源:腳本之家

鏈接:https://www.jb51.net/article/195534.htm

在線(xiàn)客服

ONLINE SERVICE

聯(lián)系電話(huà)

18094313272

返回頂部
亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费 凤山市| 怀集县| 通辽市| 莎车县| 韶山市| 南漳县| 河北区| 镇康县| 保康县| 尼勒克县| 德阳市| 靖江市| 平安县| 阳谷县| 博湖县| 大庆市| 安化县| 彭水| 抚远县| 晋江市| 驻马店市| 遵义县| 泽普县| 若羌县| 彭阳县| 区。| 剑河县| 阳西县| 原阳县| 屯昌县| 香港| 尤溪县| 靖江市| 南和县| 富川| 从化市| 高淳县| 大埔区| 宜宾县| 三门县| 澄城县| http://444 http://444 http://444 http://444 http://444 http://444