Specified key was too long; max key length is 767 bytes 解决方法
时间: 2023-07-06 21:37:29 浏览: 143
这个错误通常是由于 MySQL 数据库版本不同导致的。在 MySQL 5.6.3 版本之后,InnoDB 存储引擎的索引长度限制为 767 字节,而这个错误就是在创建索引时超出了这个限制。
要解决这个问题,可以考虑以下两种方法:
1. 修改数据库的字符集
可以将数据库的字符集从 utf8mb4 改为 utf8,因为 utf8 字符集下每个字符占用的字节数最多为 3 个字节,而 utf8mb4 字符集下每个字符占用的字节数最多为 4 个字节,所以使用 utf8 字符集可以降低索引长度。
可以使用以下语句将数据库的字符集修改为 utf8:
```
ALTER DATABASE `database_name` CHARACTER SET utf8 COLLATE utf8_general_ci;
```
注意,这会影响到数据库中所有表的字符集和校对规则,如果需要单独修改某个表的字符集,可以使用以下语句:
```
ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
```
2. 修改索引的长度
可以将某个索引的长度缩短,以满足限制。例如,将 varchar(255) 改为 varchar(191)。
修改索引的语句如下:
```
ALTER TABLE `table_name` DROP INDEX `index_name`;
ALTER TABLE `table_name` ADD INDEX `index_name` (`column_name`(191));
```
注意,修改索引的长度可能会影响到查询性能,需要根据具体情况进行权衡。
阅读全文