我试图在MySQL中创build一个表,声明如下:
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),则会创build该表,但VARCHAR(79)将失败。 为什么大于78的任何varchar大小失败? 我在网上读了一些关于MySQL把VARCHAR存储为UTF-8的文章,这个文件最多可能需要六个字节,但是79 * 6是474,这是在1000字节的限制之内,所以不能确定他们的UTF-8是否准确。
您的主键由标签和login组成,组合长度为355个字符。
如果Tag是78个字符,则总和是333,所以MySQL看起来像每字符3个字节的假设:
(78 + 255) * 3 = 999, (79 + 255) * 3 = 1002
也就是说,VARCHAR值是臭名昭着的不适合主键。
考虑添加一个INT来代替。