目前,我们有一个varchar(255)字段。我们的一位用户要求将该字段增加约10倍至varchar(2048)左右。鉴于他的用例,这似乎是一个合理的要求。
有问题的字段未编入索引,它不是任何联接的一部分,并且它永远不会包含在任何where子句中。
我意识到较小的增加(比如从50到100)没有影响,但是这仍然可以保持更大的尺寸增长吗?
答案 0 :(得分:2)
Apparently not with a sidenote:
“在存储中,VARCHAR(255)非常智能,只能存储给定行所需的长度,这与CHAR(255)不同,后者总是存储255个字符。
但是既然你用MySQL标记了这个问题,我会提到一个特定于MySQL的提示:当你的查询隐式生成一个临时表时,例如在排序或GROUP BY时,VARCHAR字段被转换为CHAR以获得优势使用固定宽度的行。如果对不需要那么长的数据使用大量VARCHAR(255)字段,这可能会使临时表非常大。
最好根据您要存储的数据类型定义列。当然,很难知道最长的邮政地址是什么,这就是为什么很多人选择长的VARCHAR,肯定比任何地址都要长。 255是习惯因素,因为在一些数据库中,它可能是一个VARCHAR的最大长度(在最近的时候直到PostgreSQL)。“
Bill Karwin
所以它基本上取决于你对该领域的特定用户;如果您不在该字段中使用GROUP BY
,则没有问题。
答案 1 :(得分:1)
对于您的情况,varchar(255)和varchar(2048)之间没有区别。
在MySQL中,临时表和MEMORY表将VARCHAR列存储为固定长度的列,填充到其最大长度。如果你设计的VARCHAR列比你需要的最大尺寸大得多,那么你将消耗更多的内存。这会影响缓存效率,排序速度等。