对于一个或两个字符的字符串,哪个更有效:CHAR(2) 或 VARCHAR(2)?

Posted

技术标签:

【中文标题】对于一个或两个字符的字符串,哪个更有效:CHAR(2) 或 VARCHAR(2)?【英文标题】:Which is more efficient for a one or two-character string: CHAR(2) or VARCHAR(2)? 【发布时间】:2011-08-04 22:08:27 【问题描述】:

一个非常快速的方法 - 在 mysql 中将可能是一个或两个字符的数据存储为 CHAR(2) 或 VARCHAR(2) 是否更有效?

谢谢!

【问题讨论】:

这两种数据类型不等价。您是否在问哪个更有效地存储恰好 2 个字符的字符串? 【参考方案1】:

就所需的存储空间而言,您最好使用 CHAR(2),因为 VARCHAR(2) 类型将需要一个额外的字节来存储长度:

值 CHAR(2) 需要存储 VARCHAR(2) 需要存储 '' ' ' 2 字节 '' 1 字节 'a' 'a' 2 个字节 'a' 2 个字节 'ab' 'ab' 2 个字节 'ab' 3 个字节

更多详情请见10.4.1. The CHAR and VARCHAR Types。

更多信息:What's the difference between VARCHAR and CHAR?

【讨论】:

【参考方案2】:

在空间方面,CHAR(2) 更好。看到这个:http://dev.mysql.com/doc/refman/5.0/en/char.html

如果你有更长的像 CHAR(100) 和 VARCHAR(100),哪个更好的空间使用取决于你拥有的数据。

在任何情况下,就查询的效率而言,在您负担得起的情况下拥有固定长度的记录总是一个好主意(数据库可以更好地优化固定长度的列)。

所以 CHAR(2) 在空间和时间方面看起来比 VARCHAR(2) 更胜一筹。

【讨论】:

【参考方案3】:

不过,我会问,varchar 和 char 之间的效率差异值得吗?似乎任何性能提升充其量都可以忽略不计。

【讨论】:

这更像是一个评论而不是一个答案......至于它是否有所作为,这将取决于用例。长度为 2 时,VARCHAR2 的每个字段的存储开销为 50%。如果有大量相似的字段和行,就会开始快速加起来。【参考方案4】:

在存储方面,VARCHAR(255) 足够智能,可以只存储给定行所需的长度,而 CHAR(255) 总是存储 255 个字符。

【讨论】:

以上是关于对于一个或两个字符的字符串,哪个更有效:CHAR(2) 或 VARCHAR(2)?的主要内容,如果未能解决你的问题,请参考以下文章

SQL的增删改查

在 Scala 中有效地重复一个字符/字符串 n 次

哪个字符串方法:“包含”或“indexOf > -1”?

PowerShell5。查找/替换文本。 Switch和.NET框架或cmdlet和管道?哪个更快?哪个更容易阅读?

比较两个字符串,在 C# 中忽略大小写 [重复]

哪个更快?修剪()或正则表达式?