我正在尝试使用以下语句在 MySQL 中创建一个表:
CREATE TABLE tags (Tag VARCHAR(200) NOT NULL default '', Login VARCHAR(255) NOT NULL default '', PRIMARY KEY (Tag, Login)) ENGINE=MyISAM;
但是我收到了一个错误:
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
如果我减少标签字段设置为 VARCHAR(78) 后,创建了表,但 VARCHAR(79) 失败了。为什么任何大于 78 的 varchar 大小都会失败?我在网上读过几篇关于 MySQL 将 VARCHAR 存储为 UTF-8 的帖子,这最多可以占用六个字节,但 79 * 6 是 474,完全在 1000 字节的限制之内,所以不确定 UTF-8 是否准确。
答案1
您的主键由 Tag 和 Login 组成,它们加起来有 355 个字符长。
如果 Tag 有 78 个字符,则总长度为 333,因此 MySQL 似乎假设每个字符有 3 个字节:
(78 + 255) * 3 = 999, (79 + 255) * 3 = 1002
也就是说,VARCHAR 值众所周知不适合用作主键。
考虑添加 INT。