使用 CHAR 比使用 VARCHAR 有啥好处?

Posted

技术标签:

【中文标题】使用 CHAR 比使用 VARCHAR 有啥好处?【英文标题】:Any benefit of uses CHAR over VARCHAR?使用 CHAR 比使用 VARCHAR 有什么好处? 【发布时间】:2011-09-29 17:58:54 【问题描述】:

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

【问题讨论】:

***.com/questions/59667/… ***.com/questions/350195/… 操作,抱歉重复的问题。得到了答案。感谢您的链接。 另外几个链接:dba.stackexchange.com/search?q=char+varchar+mysql 和dev.mysql.com/doc/refman/5.0/en/char.html,后者关注使用 concat 的 sql 查询。它们并不完全等价 【参考方案1】: VARCHAR

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

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

字符

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

char 如果你想存储非常短的字符串,或者如果所有的值都差不多 相同的长度。例如,对于用户密码的 MD5 值,CHAR 是一个不错的选择, 它们总是相同的长度。

对于频繁更改的数据,char 也比 VARCHAR 更好,因为固定长度的行不易产生碎片。

【讨论】:

现在我看到了 CHAR 关于频繁更新值的好处。非常感谢。 旁注:我不会说 char 是 MD5 散列或任何散列的好选择。它们应该以二进制格式存储,而不是像十六进制那样的不同编码。 我相信查找速度更快,因为数据库可以立即准确地知道要去哪里,而不必进行长度计算,尽管这些天这可能不太明显

以上是关于使用 CHAR 比使用 VARCHAR 有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

使用 VARCHAR(max)、NVARCHAR(max) 和 VARBINARY(max) 代替 TEXT、NTEXT 和 IMAGE 有啥好处? [关闭]

char和varchar有啥区别

当所需长度<8000 时,TEXT 比 varchar 有啥优势?

mysql中char和varchar有啥区别?

使用 Web.config 计划任务比使用 Windows 计划任务有啥好处

使用 template<int size> 比动态分配有啥好处?