-
从语义上看,varchar是变长的(Variable-length),char是定长的(Fixed-length)
-
mysql层区别(具体情况由存储引擎决定)
-
最大长度:char是255,varchar是65535,单位是字符(而不是字节)。
-
尾随空格:char会将尾随空格去掉,而varchar不会。
-
因为存储时,char会用空格填充至指定长度,所以取出时需要去除空格。如果char字段有唯一索引,
a
和a
会提示唯一索引冲突。
-
-
存储空间占用:varchar会占用额外的1~2字节来存储字符串长度。如果最大长度超过255,就需要2字节,否则1字节。
-
-
存储引擎层区别
-
char和varchar都会存储字符串长度
-
对于
CHAR(N)
字段,如果实际存储数据小于N
字节,会填充空格到N
个字节。
-
-
性能对比
-
char填充空格可能导致浪费存储空间,进而导致性能下降
-
大部分情况,最好使用varchar。
-
极端情况:对应频繁修改的情况。
-
例子:某个字段的最大长度是100字节,但是会频繁修改。如果使用
char(100)
,则插入记录后就分配了100个字节,后续修改不会造成页分裂、页空隙等问题,而varchar(100)
由于没有提前分配存储空间,后续修改时可能出现页分裂,进而导致性能下降。
-
-
-
varchar
-
优点:节省空间,对性能有帮助
-
缺点:可能会导致做多额外的工作,由于长度的变换
-
适合情况
-
字符串列最大的长度比平均的长度大很多
-
列的更新少,碎片不是问题
-
像utf-8等复杂的字符集,每个字符都使用不同的字节数进行存储
-
-
-
char
-
适用的场景
-
存储很短的字符串
-
所有的值都接近同一个长度
-
-
优点:对于经常变更的数据,不容易产生碎片,效率更高
-
缺点:不够灵活
-
MySql中char和varchar的区别
最新推荐文章于 2024-05-12 20:39:09 发布