索引长度说明
MySQL引擎对索引长度有一些限制,最主要的因素就是存储引擎和字符集。不同的字符集,单个字符包含的最大字节数有所不同。例如UTF8字符集,一个字符最多包含3个字节。而UTF8MB4一个字符最多包含 4 个字节。
- 如果是单字段索引,则字段长度不应超过表1中的“单字段最大字符数”。例如,MySQL 5.7.6版本的InnoDB引擎,单字段索引不应超过767个字节(字符数=767/最大字节数)。
- 如果是联合索引,则每个字段长度均不能超过表1中的“单字段索引最大字符数”,且所有字段长度合计不应超过“联合索引合计最大字符数”。例如,MySQL 5.7.6版本的InnoDB引擎,每个字段索引不应超过767个字节(字符数=767/最大字节数),且所有字段索引长度总和不超过3072个字节(字符数=3072/最大字节数)。
表1 索引长度说明
引擎 |
MySQL版本 |
字符集 |
最大字节数 |
单字段索引最大字符数 |
联合索引合计最大字符数 |
InnoDB
|
MySQL 5.7.6及以下版本 |
UTF8MB4 |
4 |
191 |
768 |
MySQL 5.7.7及以上版本 |
UTF8MB4 |
4 |
768 |
768 |
索引超长的处理方法
其中,tablename请用实际表名代替,columnname请用实际列名代替。
- 方法三
在源库删除该索引及其约束。以目标库为MySQL 5.7.6及以下版本的UTF8MB4为例,可通过如下方式删除索引及其约束。
drop index indexname;
alter table tablename drop constraint constraintname;
其中,indexname请用实际索引名代替,tablename请用实际表名代替,constraintname请用实际约束名代替。