MYSQL VARCHAR或CHAR用于固定长度字符串?

12
如果我知道在MySQL中存储的值始终是32个字符,那么将列类型设置为CHAR而不是VARCHAR是否可以提高性能?使用VARCHAR和CHAR之间的性能差异具体是什么?
感谢。

相关内容:https://dev59.com/h5Pea4cB1Zd3GeqP9wrK#34802591 - Gerard Roche
4个回答

8

我会使用CHAR

如果您可能在该列上搜索,CHARVARCHAR提供了小的性能提升。

由于您的数据大小将被固定,因此使用CHAR没有任何缺点,因为VARCHAR等效项将作为前缀存储一到两个字节。

参考:MySQL CHAR vs VARCHAR


7

对于你的第一个问题,“将列类型设置为CHAR而不是VARCHAR是否有更好的性能?”…答案是肯定的。绝对是。

如果您始终知道长度将是32,则一定要使用CHAR。

这里还提供了几个很好的答案: 为什么我在SQL中会选择CHAR而不是VARCHAR?


3

VARCHAR列使用一到两个字节的前缀来存储长度:

与CHAR不同,VARCHAR值以一个或两个字节的长度前缀加上数据存储。长度前缀表示值中的字节数。如果值要求不超过255个字节,则列使用一个长度字节,如果值可能需要超过255个字节,则使用两个长度字节。

因此,VARCHAR列会略微大一些。如果您知道它始终只有32个字符,那么CHAR似乎是合理的选择。在几乎所有您不完全确定长度的情况下,我建议使用VARCHAR。


0
如果字符串始终为32个字符(可能是MD5哈希),那么使用Char(32) 您可以随时运行此脚本以针对任何表查看MySQL的反应。
SELECT * FROM table PROCEDURE ANALYSE();

这将分析您的所有行并为您提供一些建议。仅在表中有相当数量的行时才能正常工作。


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