MySQL:为什么是varchar(254),而不是varchar(255)?

12

为什么许多开发人员在创建MySQL表时将varchar设置为254而不是255?

这种情况的证明:mysql varchar 254


1
也许有些人害怕真正地走到极限!生活在边缘! :) - juergen d
@Jason_vorhees:我也见过varchar(254),并想知道做出这个决定的过程是什么。我认为它只是“没有过程;这是任意愚蠢/疏忽”,但我也不排除我可能是错误的。很想听到一个答案。 - tenfour
2
149000个结果与varchar(255)的1190000个结果 :) - Maxim Krizhanovsky
我喜欢谷歌。在这个问题发布后的2分钟内,它成为了搜索查询的第一个结果。谷歌喜欢stackoverflow。 - Konerak
@BaUn请更改您选择的答案,因为有一个带有详细解释的更好的答案。 - Ankit Sharma
显示剩余3条评论
2个回答

14
您的谷歌搜索已经给出了提示。其中第一个结果是:https://www.vbulletin.com/forum/project.php?issueid=32655。该链接表明,对于VARCHAR(255)FULLTEXT索引需要比VARCHAR(254) FULLTEXT索引多两倍的空间,再加上其他一些膨胀。我认为这比在数据表中节省一个字节要重要得多。

好答案,终于我知道它的重要性了,谢谢分享。 - Ankit Sharma
请记住,这并不足以使用254 varchar代替255 varchar。您可以创建索引以容纳254个字符,而不是255个字符 - 这样,您的列将保存所有所需数据,而您的索引不会变得臃肿。此外,应该向MySQL服务器团队报告此“错误”,以便他们可以调查并修复或解释混淆。那个vbulletin帖子中的“phpMyAdmin”截图并没有给我太多信心... - Konerak
@Konerak 请随意进行一些实验并报告结果。但是:即使这种“行为”(无论是不是错误)现在已经被修复,仍然会有很长一段时间人们会继续使用限制为254的习惯。人就是这样。 - A.H.
我同意,如果有帮助的话,他们应该这样做。但是,不要限制列长度,而是限制索引长度,因为那似乎是问题所在。 - Konerak
3
链接已失效。 - broadmonkey

6

1
我同意,我是说255是正确的,不是254。现在这个问题并不太重要了。当数据库首次出现和硬盘空间非常有限时,这将是一个大问题。 - Keith
半真:这取决于存储引擎。对于MyIsam是正确的,但对于InnoDB来说不太正确,其他引擎我不记得了。 - Konerak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接