区别 |
char |
varchar |
||||||||||||||||||||||||||||||
声明长度 |
固定 |
可变 |
||||||||||||||||||||||||||||||
最大字节长度 |
0~255 |
0~65,535 |
||||||||||||||||||||||||||||||
填充方式 |
空格 |
不填充 |
||||||||||||||||||||||||||||||
是否保留尾随空格 |
✕ |
✓ |
||||||||||||||||||||||||||||||
存储 |
|
|
注
- 与 CHAR 相比,VARCHAR 值存储为 1 字节或 2 字节长度前缀加上数据。长度前缀表示值中的字节数。
- 不超过 255 个字节,则一列使用一个长度字节,
- 可能需要超过 255 个字节,则使用两个长度字节。
- 检索 CHAR 值时,将删除尾随空格,除非启用 PAD_CHAR_TO_FULL_LENGTH SQL 模式。
- 对于 VARCHAR 列,超过列长度的尾随空格在插入之前被截断并生成警告,而不管使用的 SQL 模式如何。对于 CHAR 列,无论 SQL 模式如何,都会以静默方式截断插入值中多余的尾随空格。