在TDWTF上有一场略微激烈的讨论,关于DB中varchar列的大小问题。
例如,考虑一个包含人名(仅名字,没有姓氏)的字段。很容易看出它不会太长。大多数人的名字都少于10个字符,而20个以上的人很少。如果你将该列设置为varchar(50),那么它肯定可以容纳你遇到的所有姓名。
但是对于大多数DBMS来说,无论你是varchar(50)还是varchar(255),它们的大小和速度都没有区别。
那么为什么人们要尽可能地缩小列的大小呢?我知道有些情况下确实需要限制字符串的长度,但大多数情况并非如此。只有在极少数情况下遇到极长的姓名时,才会有更大的好处。
补充:人们想要关于“大小或速度没有区别”的声明的参考资料。好的,这里它们:
对于MSSQL:http://msdn.microsoft.com/en-us/library/ms176089.aspx
针对MySQL: http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html存储大小是实际输入数据的长度+2个字节。
我找不到Oracle的文档,也没有使用其他DBMS。但我认为在其他地方也不会有所不同。如果列值需要0-255字节,则为L+1字节,如果值可能需要超过255字节,则为L+2字节