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

Posted

技术标签:

【中文标题】MYSQL VARCHAR 或 CHAR 用于固定长度字符串【英文标题】:MYSQL VARCHAR or CHAR for fixed length string 【发布时间】:2012-05-10 00:56:40 【问题描述】:

如果我知道存储在 mysql 中的值总是正好是 32 个字符,那么将列类型设置为 CHAR 而不是 VARCHAR 会更好吗?使用 VARCHAR 和 CHAR 的性能差异究竟是什么?

谢谢。

【问题讨论】:

相关***.com/a/34802591/934739 【参考方案1】:

我会使用CHAR

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

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

参考:MySQL CHAR vs VARCHAR

【讨论】:

【参考方案2】:

您的第一个问题“将列类型设置为 CHAR 而不是 VARCHAR 是否性能更好?”...的答案是肯定的。肯定的。

如果您总是知道长度将是 32,那么您绝对应该使用 CHAR。

这里也给出了几个很好的答案: Why would I ever pick CHAR over VARCHAR in SQL?

【讨论】:

【参考方案3】:

VARCHAR 列use a one or two byte prefix to store the length:

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

因此,VARCHAR 列会稍微大一些。如果您知道它总是正好是 32 个字符,那么 CHAR 似乎是合理的。在几乎任何你不能完全确定长度的情况下,我都会选择 VARCHAR。

【讨论】:

【参考方案4】:

如果字符串总是 32 个字符(可能你有一个 md5 哈希),那么选择 Char(32) 你总是可以对任何表运行这个脚本,看看mysql怎么说

SELECT * FROM table PROCEDURE ANALYSE();

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

【讨论】:

以上是关于MYSQL VARCHAR 或 CHAR 用于固定长度字符串的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL, char 与 varchar的区别!

MySQL选择合适的数据类型

MySQL中varchar和char的区别

mysql中char和varchar有啥区别?

char和varchar在mysql中的效率怎样

五:MySQL数据类型和属性