指定的密钥太长;最大密钥长度为 767 字节
Specified key was too long; max key length is 767 bytes
我了解 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);
但是收到错误信息:
Specified key was too long; max key length is 767 bytes.
但是token列的长度只有128字节,email是254字节,不超过767字节。希望有人能帮助我!提前致谢!
varchar(254)当你使用utf8mb4
时,表示254个字符,每个字符有4个字节,email字段至少需要1016 bytes (254 * 4)
。
你可以看看这篇文章:
http://wildlyinaccurate.com/mysql-specified-key-was-too-long-max-key-length-is-767-bytes/
所以你可以让你的电子邮件列:varchar(100)
另一种选择是重新评估存储在 table 中的数据的性质和限制,以及它们与 JOIN 中其他数据的关系,然后证明或不证明字符集和排序规则需要 utf8mb4。
示例:如果存储的数据 and/or 与其他数据相比永远不会有超过 2 个字节的特殊字符,您可以将字符集和排序规则替换为 utf8 和 utf8_general_ci分别(或交替)。对于 ascii 格式,您可能会更短。
无论如何,这项评估/证明工作是一个很好的做法,并且可以免费带来应计绩效。
我了解 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);
但是收到错误信息:
Specified key was too long; max key length is 767 bytes.
但是token列的长度只有128字节,email是254字节,不超过767字节。希望有人能帮助我!提前致谢!
varchar(254)当你使用utf8mb4
时,表示254个字符,每个字符有4个字节,email字段至少需要1016 bytes (254 * 4)
。
你可以看看这篇文章:
http://wildlyinaccurate.com/mysql-specified-key-was-too-long-max-key-length-is-767-bytes/
所以你可以让你的电子邮件列:varchar(100)
另一种选择是重新评估存储在 table 中的数据的性质和限制,以及它们与 JOIN 中其他数据的关系,然后证明或不证明字符集和排序规则需要 utf8mb4。
示例:如果存储的数据 and/or 与其他数据相比永远不会有超过 2 个字节的特殊字符,您可以将字符集和排序规则替换为 utf8 和 utf8_general_ci分别(或交替)。对于 ascii 格式,您可能会更短。
无论如何,这项评估/证明工作是一个很好的做法,并且可以免费带来应计绩效。