1. 最大字符长度
- CHAR(M)最大长度为255字节(-1)
- VARCHAR(M)最大长度是65532字节(-1)
2. 长度是否可变
- CHAR是定长的,这意味着,当你定义的字段类型是CHAR(32),那么无论你存1个还是10个字符,数据库都是分配32个字符的空间。而后面没用完的,就用空格填充。
- VARCHAR是变长的,这意味着,当你定义VARCHAR(32)的字段,存1个字符就占1个空间、存10个就占10个空间,不进行额外填充。此外,VARCHAR值存储的时候是“ 长度前缀+数据”,长度前缀为1字节或2字节,如果值不超过255个字节,那么长度是1字节(8位就够了),如果长度超过255个字节,那么长度就是2个字节(8位不够,需要16位)
3. 取数据的不同
- 数据库取CHAR值时,尾部的空格会被删除;
- 数据库取VARCHAR值时,尾部的空格仍然保留。
4. 性能对比
- 从空间上考虑,一般VARCHAR更好,因为没有多余的空格填充。之所以说“一般”是因为当字符串比较短时,VARCHAR额外的一个字节的长度前缀还是要考虑的。
- 从时间上考虑,CHAR更好。VARCHAR是按需分配空间,当字符串长度或者长度前缀变大,导致原来分配的空间无法满足存储需求时,系统会进行额外的操作。
5. 适用场景
- 长度固定或者长度变化不大的字符串,用CHAR
- 长度变化较大的字符串,用VARCHAR
- 此外,要结合实际的需求考虑,比如磁盘空间、响应速度等