4

目前,我们有一个 varchar(255) 字段。我们的一位用户要求将该字段增加约 10 倍至 varchar(2048) 左右。鉴于他的用例,这似乎是一个合理的要求。

有问题的字段没有被索引,它不是任何连接的一部分,也永远不会包含在任何 where 子句中。

我意识到较小的增加(例如从 50 到 100)没有影响,但这仍然适用于更大的尺寸增加吗?

4

2 回答 2

2

显然没有旁注

“在存储中,VARCHAR(255) 足够聪明,可以只存储给定行所需的长度,而 CHAR(255) 总是存储 255 个字符。

但是既然你用 MySQL 标记了这个问题,我会提到一个 MySQL 特定的提示:当你的查询隐式生成一个临时表时,例如在排序或 GROUP BY 时,VARCHAR 字段将转换为 CHAR 以获得使用固定的优势-宽度行。如果您对不需要那么长的数据使用大量 VARCHAR(255) 字段,这会使临时表变得非常大。

最好根据您要存储的数据类型来定义列。当然,很难知道最长的邮政地址是多少,这就是为什么许多人选择肯定比任何地址都长的长 VARCHAR 的原因。并且 255 是习惯性的,因为它可能是早期某些数据库中 VARCHAR 的最大长度(以及直到最近的 PostgreSQL)。”

比尔·卡尔文

因此,它基本上取决于您在该领域的特定用户;如果您不使用GROUP BY该字段,则没有问题。

于 2013-05-26T14:15:33.680 回答
2

对于您的情况,varchar(255) 和 varchar(2048) 之间没有区别。

在 MySQL 中,临时表和 MEMORY 表将 VARCHAR 列存储为固定长度列,填充到其最大长度。如果您设计的 VARCHAR 列比您需要的最大大小大得多,那么您将消耗更多的内存。这会影响缓存效率、排序速度等。

于 2013-05-26T14:16:22.763 回答