ChatGPT解决这个技术问题 Extra ChatGPT

VARCHAR(20000) 在 MySQL 中有效吗?

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

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

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


C
Community

注意 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

啊!所以这只是版本的改变,就这么简单(真是一种解脱)。谢谢你的帮助。
不客气,黛利拉。保持良好的工作!很高兴看到人们用这样的问题来充实他们的知识。
FWIW,MySQL 也接受 VARCHAR(65536),但它隐式地将列提升为 MEDIUMTEXT
我想补充一下这个答案:无论是什么版本(至少高达 5.5),向大于 VARCHAR(767) 的列添加索引都不起作用(这包括 PK)。
W
Wouter van Nifterick

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

CHAR 一直是最大 255。

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


H
Havenard

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


我同意。这是我一直在读的,也是我所做的。但是,唉,这个数据库不是我的,我只是想弄清楚我所看到的。但感谢您支持我的想法!
s
shantanuo

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


它可以建造。只是您必须将索引长度限制为 1000。
C
Community

此问题已在 What is the MySQL VARCHAR max size? 找到答案

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


p
pavium

MySQL手册指出

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

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