【发布时间】:2012-06-23 08:17:09
【问题描述】:
我看到评论“如果在 varchar(20) 列中有 5000 万个介于 10 到 15 个字符之间的值,并且在 varchar(50) 列中有相同的 5000 万个值,它们将占用完全相同的空间。那就是varchar 的全部意义,而不是 char。”。谁能告诉我原因?见What is a reasonable length limit on person "Name" fields?
【问题讨论】:
-
它施加了一个逻辑限制(例如,BO 规则或“安全”)。请搜索 SO - 它之前出现过,通常以一场激烈的辩论结束。
-
@rabudde:你确定吗?能给个参考吗?如果将定义的长度放入索引或 varchar 列中,我会非常感到惊讶(现在
char是另一回事)。据我所知,没有任何 DBMS 将完整长度存储在索引中 - 但是 MySQL 总是能带来惊喜。 -
@pst, a_horse_with_no_name:你说得对,我对另一个事实(UTF8 和索引)感到困惑,这正是重点,太大的
varchar长度会导致性能不佳对临时表进行排序或操作(在 O`Reilly 的高性能 MySQL 中引用) -
我认为副本很合适,尽管它是基于 varchar(255) 的减少。它还避免了其他链接问题的一些仅以性能为导向的答案。