MYSQL版本:5.7.20
Error: 1089 - Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys
谷歌翻译:错误:1089 - 不正确的子部分关键; 使用的关键部分不是字符串,使用的长度比关键部分长,或者存储引擎不允许。
也就是说,错误的主要原因来源有三个。
1 - 使用的关键部分不是字符串。
可能试图在不是字符串的列上创建索引前缀。例如,如果索引前缀所基于的列是非字符串(即INT,TIMESTAMP等),则会收到此错误:
"INDEX Col(id(5))"添加普通索引到test表,并尝试基于列Col的前5个字节创建索引前缀,但列Col是INT。不能存在这种操作。
2 - 使用的长度比关键部分长。
当你尝试创建索引前缀比您正在建立索引的实际列更长时,会出现这种情况。示例:
"INDEX SingleIdx(name(100))"语句添加普通索引SigleIdx,并尝试基于name列的前100个字节创建索引前缀。由于name只有10个字符宽,所以会产生错误。
现在尝试小于10个字节创建索引:
创建成功。
3 - 存储引擎不支持。
这表明你正在尝试在存储引擎不允许使用的表上创建索引前缀。例如,在4.0.14之前,有限制阻止InnoDB表具有列前缀的索引。
最简单的解决方案就是改变存储引擎。
以上就是ERROR 1089的较详细阐述,希望对你有帮助。
参考:http://www.mysqlab.net/knowledge/kb/detail/topic/error%20messages/id/6576