注意 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
它从 5.0.3 版开始有效,当时他们将最大长度从 255 更改为 65535。
CHAR
一直是最大 255。
http://dev.mysql.com/doc/refman/5.0/en/char.html
如果您期望输入太大,最好使用 TEXT、MEDIUMTEXT 或 LONGTEXT。
虽然索引不能建立在 varchar(2000)
此问题已在 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 类型,并且具有相同的最大长度和存储要求。
MySQL手册指出
VARCHAR 列中的值是可变长度字符串。在 MySQL 5.0.3 之前,长度可以指定为 0 到 255 之间的值,在 5.0.3 和更高版本中可以指定为 0 到 65,535 之间的值。
所以这取决于你使用的版本。
VARCHAR(65536)
,但它隐式地将列提升为MEDIUMTEXT
。VARCHAR(767)
的列添加索引都不起作用(这包括 PK)。