65

我需要澄清 MySQL 中 varchar 字段的最大长度。

我一直认为最大长度是 255(255 什么?我假设的字符,但这可能是我困惑的根源)。查看由我们正在合作的外部公司设置的数据库表,我看到一个字段设置为 varchar(20000),包含超过 255 个字符的 xml 块。为什么这行得通?20000 是有效值吗?

谷歌搜索了一下,mysql varchar 的限制为 65,535 字节,我看到 varchar(65535) in use,那么 255 限制与此有何关系?

4

6 回答 6

78

注意 MySQL 版本。

http://dev.mysql.com/doc/refman/5.0/en/char.html

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。MySQL 5.0.3 及更高版本中 VARCHAR 的有效最大长度取决于最大行大小(65,535 字节,在所有列之间共享)和使用的字符集。

我有什么版本的 MySQL?

运行以下查询...

select version() as myVersion
于 2009-08-20T01:21:01.120 回答
12

它从 5.0.3 版开始有效,当时他们将最大长度从 255 更改为 65535。

CHAR一直是最大 255。

http://dev.mysql.com/doc/refman/5.0/en/char.html

于 2009-08-20T01:19:45.737 回答
8

如果您期望输入太大,最好使用 TEXT、MEDIUMTEXT 或 LONGTEXT。

于 2009-08-20T01:19:48.327 回答
3

虽然索引不能建立在 varchar(2000)

于 2009-09-27T10:56:42.943 回答
2

这个问题在 MySQL VARCHAR 最大大小是多少?

请记住,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 类型,并且具有相同的最大长度和存储要求。

于 2017-01-14T09:34:24.560 回答
1

MySQL手册指出

VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。

所以这取决于你使用的版本。

于 2009-08-20T01:29:04.370 回答