mysql索引长度超过767bytes问题解决

当遇到MySQL因InnoDB存储引擎的索引长度限制导致的错误Specifiedkeywastoolong;maxkeylengthis767bytes时,可以通过开启innodb_large_prefix参数并设置表的ROW_FORMAT为dynamic或compressed来扩展至3072字节。这需要修改MySQL配置,如设置innodb_large_prefix=ON和innodb_file_format=BARRACUDA,并在建表或修改表结构时指定ROW_FORMAT。

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

mysql索引长度超过767bytes问题解决。Specified key was too long; max key length is 767 bytes

错误信息:

Specified key was too long; max key length is 767 bytes
MySQLInnoDB存储引擎的表存在一系列的限制条件,其中比较常见的一种是表的字段索引长度限制,该限制与参数innodb_large_prefix相关。


原因分析:

导致上面报错的原因是由于InnoDB表的索引长度限制,在MySQL5.6版本后引入了参数innodb_large_prefix可以解决这个问题。该参数控制是否允许单列的索引长度超过767字节,有ON和OFF两个取值:

:Innodb表的行记录格式是DynamicCompressed的前提下,单列索引长度上限扩展到3072个字节。
:Innodb表的单例索引长度最多为767个字节,索引长度超出后,主键索引会创建失败,辅助索引会被截断成为前缀索引。

解决办法:

设置MySQL的全局参数innodb_large_prefix=ON,将InnoDB表的索引长度上限扩大到3072个字节。



MySQL5.6以及之前版本

以及之后的版本,不包括8.0,默认innodb_large_prefix为开启状态。
版本以及之后版本直接看到 45步骤

1. 查看MySQL数据库当前的配置;
2. show variables like 'innodb_large_prefix'; 
show variables like 'innodb_file_format';

在这里插入图片描述
在这里插入图片描述

2 修改配置

set global innodb_large_prefix=ON;//开启不限制索引长度 
set global innodb_file_format=BARRACUDA;//这个不知道

3.建表时需要指定ROW_FORMAT为dynamic或compressed

CREATE TABLE IMPORTS( 
`ID` int(10) NOT NULL AUTO_INCREMENT COMMENT '资产ID',
 PKG_ID int(10) NOT NULL COMMENT '资产ID',
 CLASS_NAME varchar(255) NOT NULL COMMENT '类名', 
) ENGINE=InnoDB ROW_FORMAT=dynamic DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

4.表已经存在,只需修改。

ALTER TABLE `TableName ` row_format=dynamic;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值