据我所知,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个字节.希望有人能帮助我!提前致谢!
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 )