区别:
-
CHAR 是定长的,而 VARCHAR 是可以变长。
-
CHAR 会根据声明的字符串长度分配空间,并会使用空格对字符串右边进行尾部填充。所以在检索 CHAR 类型数据时尾部空格会被删除,如保存的是字符串 'char ',但最后查询到的是 ‘char’。又因为长度固定,所以存储效率高于 VARCHAR 类型。
-
VARCHAR 在 MySQL 5.0 之后长度支持到 65535 字节,但会在数据开头使用额外 1~2 个字节存储字符串长度(列长度小于 255 字节时使用 1 字节表示,否则 2 字节),在结尾使用 1 字节表示字符串结束。
-
在存储方式上,CHAR 对英文字符(ASCII)占用 1 字节,对一个汉字使用用 2 字节。而 VARCHAR 对每个字符均使用 2 字节。
char 与 varchar 如何进行选择?
-
对于经常变更的数据来说,CHAR 比 VARCHAR更好,因为 CHAR 不容易产生碎片。
-
对于非常短的列或固定长度的数据 如 MD5,CHAR 比 VARCHAR 在存储空间上更有效率。
-
使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。
-
尽量避免使用 TEXT/BLOB 类型,查询时会使用临时表,导致严重的性能开销。



