MySQL存储秘密揭示:CHAR vs.VARCHAR,解锁定长神器的终极选择指南!

点击上方蓝字关注我

CHAR和VARCHAR类型在存储和检索方式上有相似之处,但在最大长度以及是否保留尾随空格方面存在差异。


1.  存储方面

1.1 存储对比

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

CHAR列的长度在创建表时被固定为您声明的长度。长度可以是从0到255的任何值。当存储CHAR值时,它们会被右填充到指定的长度。当检索CHAR值时,除非启用了PAD_CHAR_TO_FULL_LENGTH SQL模式(默认没启用),否则会删除尾随空格。

VARCHAR列中的值是可变长度字符串。长度可以指定为0到65,535的值。VARCHAR的有效最大长度取决于最大行大小(65,535字节,这个大小被所有列共享)和所使用的字符集。

1.2 具体对比

假设当前一个表里包含类型为char(4)及varchar(4)的列(假设该列使用单字节字符集如latin1),则,存储所需的大小对比如下:

注:

  • 如果字符集为其他类型(utf8mb4),则根据存储的内容进行换算即可

  • 上例中为了演示,非严格模式时可以截断存储