每当我设置一个新的SQL表时,我都会有同样的感觉,即2 ^ n更“均匀”......但总结一下这里的答案,只需定义varchar(2 ^ n)就不会对存储空间产生重大影响。 甚至varchar(MAX)。
也就是说,在设置高varchar()限制时,您仍应该预见到对存储和性能的潜在影响。 例如,假设您创建了一个varchar(MAX)列来保存带有全文索引的产品描述。 如果99%的描述只有500个字符长,然后突然有人用维基百科文章替换所述描述,您可能会注意到意外的重要存储和性能命中。
Bill Karwin要考虑的另一件事:
有一个可能的性能影响:在MySQL中,临时表 和MEMORY表将VARCHAR列存储为固定长度的列, 填充到最大长度。 如果您设计很多VARCHAR列 大于你需要的最大尺寸,你将消耗更多的内存 比你必须的。 这会影响缓存效率,排序速度等。
基本上,只是在略大的尺寸上提出合理的业务约束和错误。 正如@onedaywhen指出的那样,英国的姓氏通常在1-35个字符之间。 如果你决定把它变成varchar(64),你真的不会伤害任何东西......除非你存储这个家伙的姓氏据说长达666个字符。 在那种情况下,也许varchar(1028)更有意义。
如果它有用,这里的varchar 2 ^ 5到2 ^ 10可能看起来像填充:
varchar(32) Lorem ipsum dolor sit amet amet.
varchar(64) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donecie
varchar(128) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donecie
vestibulum massa. Nullam dignissim elementum molestie. Vehiculas
varchar(256) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donecie
vestibulum massa. Nullam dignissim elementum molestie. Vehiculas
velit metus, sit amet tristique purus condimentum eleifend. Quis
que mollis magna vel massa malesuada bibendum. Proinde tincidunt
varchar(512) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donecie
vestibulum massa. Nullam dignissim elementum molestie. Vehiculas
velit metus, sit amet tristique purus condimentum eleifend. Quis
que mollis magna vel massa malesuada bibendum. Proinde tincidunt
dolor tellus, sit amet porta neque varius vitae. Seduse molestie
lacus id lacinia tempus. Vestibulum accumsan facilisis lorem, et
mollis diam pretium gravida. In facilisis vitae tortor id vulput
ate. Proin ornare arcu in sollicitudin pharetra. Crasti molestie
varchar(1024) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donecie
vestibulum massa. Nullam dignissim elementum molestie. Vehiculas
velit metus, sit amet tristique purus condimentum eleifend. Quis
que mollis magna vel massa malesuada bibendum. Proinde tincidunt
dolor tellus, sit amet porta neque varius vitae. Seduse molestie
lacus id lacinia tempus. Vestibulum accumsan facilisis lorem, et
mollis diam pretium gravida. In facilisis vitae tortor id vulput
ate. Proin ornare arcu in sollicitudin pharetra. Crasti molestie
dapibus leo lobortis eleifend. Vivamus vitae diam turpis. Vivamu
nec tristique magna, vel tincidunt diam. Maecenas elementum semi
quam. In ut est porttitor, sagittis nulla id, fermentum turpist.
Curabitur pretium nibh a imperdiet cursus. Sed at vulputate este
proin fermentum pretium justo, ac malesuada eros et Pellentesque
vulputate hendrerit molestie. Aenean imperdiet a enim at finibus
fusce ut ullamcorper risus, a cursus massa. Nunc non dapibus vel
Lorem ipsum dolor sit amet, consectetur Praesent ut ultrices sit