MySQL – CHAR vs VARCHAR区别

CHAR和VARCHAR类型相似,但在存储和检索方式上有所不同。它们在最大长度和是否保留尾随空格方面也有所不同。

CHAR和VARCHAR类型的声明长度表示希望存储的最大字符数。例如,CHAR(30)最多可以容纳30个字符。

区别

  • CHAR列的长度固定为创建表时声明的长度。长度可以是0到255之间的任何值。VARCHAR列中的值是可变长度的字符串。长度可以指定为0到65,535之间的值。
  • 空格填充的区别:当存储CHAR值时,用空格将它们右填充到指定的长度。检索CHAR值时,除非启用了PAD_CHAR_TO_FULL_LENGTH SQL模式,否则将删除尾随空格。存储VARCHAR值时不填充它们。
  • 与CHAR不同,VARCHAR值存储为1字节或2字节长度的前缀加上数据。长度前缀表示值中的字节数。如果值需要的长度不超过255字节,则列使用一个长度字节;如果值需要的长度可能超过255字节,则使用两个长度字节。
  • 在效率方面,如果存储的字符串长度变化很大,那么使用VARCHAR,如果长度总是相同,那么使用CHAR,因为它稍微快一些。

例子

下表通过显示将各种字符串值存储到CHAR(4)和VARCHAR(4)列的结果来说明CHAR和VARCHAR之间的区别(假设该列使用的是诸如latin1之类的单字节字符集)。

Value CHAR(4) Storage Required VARCHAR(4) Storage Required
'' ' ' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

参考资料

https://dev.mysql.com/doc/refman/8.0/en/char.html

haproxy的frontend/backend和listen区别
Curl命令来访问Elasticsearch?