据我所知,InnoDB索引的最大长度为767字节。
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(254) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
.....
`token` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`rank` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_token_index` (`token`),
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
我想在我的电子邮件中创建一个索引。
alter table agent add UNIQUE index idx_on_email (email);
但收到了错误消息:
指定的密钥太长;最大密钥长度为767字节。
但令牌列的长度只有128个字节,电子邮件是254个字节,而不是767个字节以上。希望有人能帮助我!提前谢谢!
答案 0 :(得分:7)
varchar(254)当您使用utf8mb4
时,表示254个字符,每个字符有4个字节,电子邮件字段至少需要1016 bytes (254 * 4)
。
你可以看看这篇文章:
http://wildlyinaccurate.com/mysql-specified-key-was-too-long-max-key-length-is-767-bytes/
所以你可以制作你的电子邮箱专栏:varchar(100)