我需要澄清 MySQL 中 varchar 字段的最大长度。
我一直认为最大长度是 255(255 什么?我假设的字符,但这可能是我困惑的根源)。查看由我们正在合作的外部公司设置的数据库表,我看到一个字段设置为 varchar(20000),包含超过 255 个字符的 xml 块。为什么这行得通?20000 是有效值吗?
谷歌搜索了一下,mysql varchar 的限制为 65,535 字节,我看到 varchar(65535) in use,那么 255 限制与此有何关系?
注意 MySQL 版本。
VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。
运行以下查询...
select version() as myVersion
它从 5.0.3 版开始有效,当时他们将最大长度从 255 更改为 65535。
CHAR
一直是最大 255。
如果您期望输入太大,最好使用 TEXT、MEDIUMTEXT 或 LONGTEXT。
虽然索引不能建立在 varchar(2000)
请记住,MySQL 有最大行大小限制
MySQL 表的内部表示具有 65,535 字节的最大行大小限制,不包括 BLOB 和 TEXT 类型。BLOB 和 TEXT 列仅对行大小限制贡献 9 到 12 个字节,因为它们的内容与行的其余部分分开存储。阅读有关表列数和行大小限制的更多信息。
MySQL 5.0.3 前后单个列可以占用的最大大小不同
VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到65,535之间的值。MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。
但是,请注意,如果您使用 utf8 或 utf8mb4 等多字节字符集,则限制会更低。
使用TEXT
类型来克服行大小限制。
四种 TEXT 类型是 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。这些对应于四种 BLOB 类型,并且具有相同的最大长度和存储要求。
MySQL手册指出
VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。
所以这取决于你使用的版本。