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