
# RDS for MySQL创建索引失败报错\[ERROR\] 1071的解决方案
#### 场景描述
创建索引长度超限制导致创建失败。创建表索引时出现如下错误：
**\[ERROR\] 1071 - Specified key was too long; max key length is 3072 bytes**
问题可能出现的版本：MySQL-8.0.20.5
#### 故障分析
InnoDB表引擎有限制。
默认情况下，索引前缀长度限制为 767 字节，当开启了"innodb_large_prefix"选项时，索引前缀长度扩展到 3072 字节。
```
SHOW VARIABLES LIKE ‘%innodb_large_prefix%’;
```
![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002247223617.png)
索引前缀长度还和 InnoDB 的 page size 有关。"innodb_page_size"选项默认是 16KB 的时候，最长索引前缀长度是 3072 字节，如果是 8KB 的时候，最长索引前缀长度是 1536 字节；4KB 的时候，最长索引前缀长度是 768 字节。
```
SHOW VARIABLES LIKE ‘%innodb_page_size%’;
```
![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002247143521.png)
查看问题表结构，并查询所有支持的字符集及其字节占用情况：
```
SHOW CHARACTER SET;
```
![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002212223520.png "点击放大")
问题所在的表的字符集是 utf8mb4 时，一个字符将占用 4 个字节。这意味着索引前缀最大长度为 3072 字节时，只能容纳 3072 / 4 = 768 个字符。因此只要将上面建表语句索引字段的前缀长度设为768或者修改索引字段，让其小于3072字节。
#### 解决方案
修改索引字段长度，即可成功创建索引。
![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002247223609.png "点击放大")
