MySQL对创建索引的大小有限制,一般索引键最大长度总和不能超过1000个字节。
问题描述
MySQL创建索引时报错 Specified key was too long;max key length is 1000 bytes.
解决办法
(1) 修改存储引擎
InnoDB的索引字段长度限制大于MyISAM,可以尝试改成InnoDB引擎。
(2) 修改字符集
不同的字符集,单个字符包含的最大字节数有所不同。比如 utf8 字符集,一个字符最多包含 3 个字节。而 utf8mb4 一个字符最多包含 4 个字节。见上图!
(3) 修改索引字段的字符长度
alter table modify cloumn col1 varchar(30);
可以通过缩短表字段的长度,来满足限制
(5)在创建索引时限制字段上的前缀索引长度:
CREATE TABLE `test` (
`a` varchar(767),
`b` varchar(1),
`c` varchar(200),
`d` varchar(168),
`e` varchar(5),
KEY `a_index` (`a`(191),`b`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
这里只取 `a` 字段的191个字符来做索引。