mysql 报错 Specified key was too long; max key length is 767 bytes,开启系统变量:innodb_large_prefix

本文介绍了MySQL使用utf8mb4字符集时遇到的Specifiedkeywastoolong错误及其原因。详细解释了innodb_large_prefix系统变量的作用,并提供了两种解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql 报错 Specified key was too long; max key length is 767 bytes

当mysql数据库的字符集使用了utf8mb4,就很容易在执行建表sql的时候报这个错误。

原因:

mysql有个系统变量innodb_large_prefix,
如果开启了,索引键前缀限制为3072字节;
如果禁用了,索引键前缀限制为767字节。

当mysql数据库的字符集使用了utf8mb4,每个字符最大的字节数为4,如果建表语句中,有类似varchar(255)的字段,4*255 > 767,就会报这个错: Specified key was too long; max key length is 767 bytes。

解决:

方法1:varchar(x),x<191,那么4*x<767,就不会报错。

方法2:开启系统变量:innodb_large_prefix,如下操作:

mysql> set global innodb_file_format = BARRACUDA;
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global innodb_large_prefix = ON;
Query OK, 0 rows affected (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值