5

我看到一直使用 VARCHAR(255) 而不是 VARCHAR(256),但我也看到使用 VARCHAR(16) 而不是 VARCHAR(15)。这对我来说似乎不一致。如果使用额外的字节来存储 VARCHAR 的长度,那么这条规则是否也适用于较小的长度,例如 2、4、8 为 1、3、7?

还是我完全错过了什么?

换句话说,如果我有一个我知道永远不会超过 12 的数字,我应该继续使用 VARCHAR(15) 还是 VARCHAR(16) 来代替?因为它使用与 VARCHAR(12) 相同的空间量?如果是这样,我该使用哪一个?15 还是 16?当我接近 256 时,这条规则会发生变化吗?

根据项目,我同时使用 MySQL 和 SQL。

4

3 回答 3

11

换句话说,如果我有一个我知道永远不会超过 12 的数字,我应该继续使用 VARCHAR(15) 还是 VARCHAR(16) 来代替?

不!使用 varchar(12) (如果长度相当恒定,甚至可以使用 char(12) )。

曾几何时,varchar 类型在某些系统(包括 5.0.3 之前的 MySql)上被限制为 255 个字符,因为存储的第一个字节表示字段的长度。鉴于此限制,想要允许合理数量的文本的开发人员会选择 255,而不是完全使用不同的数据类型。

但是,如果您知道数据的大小,请务必使用该大小的数据库。

于 2009-08-03T19:45:14.977 回答
4

它与奇数或偶数无关。

VARCHAR从历史上看,255 个字符通常是各种 DBMS中 a 的最大长度。当时不是(大对象)的字段的长度限制LOB是 255 字节(1 字节 int)。所以第一个字节用于存储字段的长度(0-255),其余n字节用于字符。这就是你经常看到的原因VARCHAR(255)

如果该字段永远不会大于 12,请使用VARCHAR(12).

于 2009-08-03T19:47:27.483 回答
2

我认为最初的问题是对于某些系统 VARCHAR(...) 被限制为 255,因为当您使用一个字节来编码实际长度时,您最多只能表示 255 的长度。

VARCHAR(16) / VARCHAR(15) 这很可能让人想起这些起源,但是这两个值并没有什么特别之处。

于 2009-08-03T19:46:14.163 回答