使用CHAR有什么优势,相较于使用VARCHAR?

8

CHAR被存储为固定长度字符串,VARCHAR被存储为可变长度字符串。我可以使用VARCHAR来存储固定长度的字符串,但为什么人们仍然想使用CHAR来存储固定长度的字符串呢? 使用CHAR而不是VARCHAR是否有任何好处?如果没有好处,为什么MySQL数据库不删除CHAR选项?


https://dev59.com/63VD5IYBdhLWcg3wL4cA - Vishwanath Dalvi
https://dev59.com/r3RC5IYBdhLWcg3wSu57 - Vishwanath Dalvi
抱歉,问题重复了。我已经得到答案了。感谢提供链接。 - zac1987
另外还有几个链接:http://dba.stackexchange.com/search?q=char+varchar+mysql 和 http://dev.mysql.com/doc/refman/5.0/en/char.html。后者在使用concat的SQL查询时需要特别注意,它们并不完全等同。 - bpaulon
这个问题及其答案已经过时了。在最新的MySQL 8版本中,几乎没有使用CHAR的任何优势。 - undefined
1个回答

12

VARCHAR

VARCHAR 存储可变长度的字符字符串。它可以比定长类型需要更少的存储空间,因为它只使用所需的空间。

VARCHAR 还使用 1 或 2 个额外的字节来记录值的长度。例如 varchar(10) 将使用最多 11 字节的存储空间。VARCHAR 提高了性能,因为它节省了空间。但是,由于行是可变长度的,当您更新它们时,它们可能会增长,这可能导致额外的工作。如果一行增长并且不再适合其原始位置,则行为取决于存储引擎。

CHAR

CHAR 是定长的,mysql 总是为指定数量的字符分配足够的空间。在存储 CHAR 值时,MySQL 移除任何尾随空格。需要填充值以进行比较。

如果要存储非常短的字符串,或者所有值的长度几乎相同,则 CHAR 很有用。

例如,CHAR 对于用户密码的 MD5 值是一个很好的选择,这些值始终具有相同的长度。

对于经常更改的数据,CHAR 比 VARCHAR 更好,因为定长行不容易产生碎片。


1
现在我明白了CHAR在频繁更新值方面的好处。非常感谢你。 - zac1987
附注:我不会说char是MD5哈希或任何哈希的好选择。它们应该以二进制格式存储,而不是像十六进制这样的不同编码。 - Luc
我相信查找速度更快,因为数据库立即知道去哪里,而不需要进行长度计算,尽管这些日子可能不太明显。 - Toni Leigh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接