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 用于固定长度字符串的主要内容,如果未能解决你的问题,请参考以下文章