我知道对此有很多问题,但我认为我的数学是正确的。
- MySQL 为每个 UTF8 字符保留 3 个字节。
- MyISAM 允许长度为 1000 字节的密钥。
- 我的 UTF8 VARCHAR(255)应该是
255 * 3 = 765
字节
除非 UNQUE 每个条目需要额外的 200+ 字节,否则为什么这不起作用?
mysql> ALTER TABLE entry ADD UNIQUE INDEX (name(255));
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
对此我能做些什么吗?
编辑:
事实证明限制是 250。对于唯一索引,字符似乎计为 4 个字节,但我不知道为什么。
编辑2:
感谢 Vladislav Vaintroub,字符集确实是 utf8mb4。这就解开了谜团。我没有看到任何有关此更改的文档。
我猜它通过隐式截断字段来构建非唯一索引,这对于唯一索引是不可接受的,因此它拒绝。
如果您重新输入您的评论作为答案,我很乐意接受。
解决方案:指定 utf8,而不是 utf8mb4(MySQL Admin 不允许这样做,所以手动创建表)