问题描述
通过数据管理DMS对使用InnoDB引擎的MySQL实例创建或变更前缀索引(Index Prefixes)时,系统提示以下错误。
Incorrect prefix 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
问题原因
创建或变更前缀索引时系统提示上述错误的原因如下:
- 原因一
目标字段不是VARCHAR(字符)类型。前缀索引仅支持VARCHAR类型的字段。如果目标字段是INT(整数)、TIME(时间)等非VARCHAR类型的字段,则会出现此报错。 - 原因二
定义的前缀索引长度超过字段本身的长度。例如,定义字段column_a的长度为128字符,即column_a varchar(128)
,设置前缀索引时的长度为130字符,即key idx_a(column_a(130))
,则报错产生。需要确保前缀索引的长度小于字段本身的长度。说明:更多有关VARCHAR类型长度的介绍,请参见更多信息。
解决方案
请检查您创建或变更前缀索引的SQL语句,确保目标字段符合以下要求:
- 目标字段为VARCHAR类型。
- 前缀索引长度小于字段本身的长度。
如果您不确定目标字段的类型或本身的长度,可以通过desc
等SQL语句进行查询。
更多信息
VARCHAR类型字段所能存放的汉字、数字或字母与MySQL版本有关,具体如下:
- MySQL5.0以下的版本
varchar(X)
中X的单位是字节。例如varchar(100),指的是100个字节,如果存放UTF8汉字,只能存放33个汉字,因为UTF8编码中,每个汉字占用3个字节。 - MySQL5.0及以上的版本
varchar(X)
中X的单位是字符。例如varchar(100),指的是100个字符,无论存放的是汉字、数字或字母,都可以存放100个。
相关文档
如果您想了解更多有关前缀索引的信息,请参见MySQL官方介绍文档。
适用于
- 数据管理DMS