文章连接 : MySQL中char与varchar的区别:存储机制、性能差异 | 毛英东的个人博客 (maoyingdong.com)
varchar和char在MySQL层的区别
根据MySQL的官方文档The CHAR and VARCHAR Types中的描述, varchar和char的区别主要有:
- 最大长度:char是255,varchar是65535,单位是字符(而不是字节)。
- 尾随空格:char会将尾随空格去掉,而varchar不会。
因为存储时,char会用空格填充至指定长度,所以取出时需要去除空格。如果char字段有唯一索引,a
和a
会提示唯一索引冲突。 - 存储空间占用:varchar会占用额外的1~2字节来存储字符串长度。如果最大长度超过255,就需要2字节,否则1字节。
注意:这是MySQL层的描述,具体怎么存储由存储引擎决定。
char和varchar存储对比
- char和varchar都会存储字符串长度
- 对于
CHAR(N)
字段,如果实际存储数据小于N
字节,会填充空格到N
个字节。
性能对比
从char和varchar的存储结构对比,可以得出一个结论:char填充空格可能导致浪费存储空间,进而导致性能下降。因为char多存储一些空格,意味着需要从磁盘读写更多的数据、耗费更多内存、查找数据时删除空格可能也会耗费一些CPU性能。