解决MySQL报 index column size too large. the maximum column size is 767 bytes 问题

当修改某一张表的某一个字段时报此错误:index column size too large. the maximum column size is 767 bytes原因分析如下:

mysql的的搜索引擎是innodb;

innodb_large_prefix
    ON :Innodb表的行记录格式(row format)是Dynamic或Compressed的前提下,单列索引长度上限扩展到3072个字节 (5.7默认)
    OFF:Innodb表的单例索引长度最多为767个字节,索引长度超出后,主键索引会创建失败,辅助索引会被截断成为前缀索引(5.6默认的)
    系统变量innodb_large_prefix开启了,则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。如果禁用innodb_large_prefix,不管是什么表,索引键前缀限制为767字节。

innodb_file_format Antelope(compact、redundant)、barracuda(compressed、dynamic)
     Antelope: 先前未命名的,原始的InnoDB文件格式。它支持两种行格式:COMPACT 和 REDUNDANT。MySQL5.6的默认文件格式。可以与早期的版本保持最大的兼容性。不支持 Barracuda 文件格式。
     Barracuda: 新的文件格式。它支持InnoDB的所有行格式,包括新的行格式:COMPRESSED 和 DYNAMIC。与这两个新的行格式相关的功能包括:InnoDB表的压缩,长列数据的页外存储和索引建前缀最大长度为3072字节。

比如果要修改名为dbone数据库的test表中的name字段:

执行步骤描述相关命令
第一步innodb_large_prefix 的值改为(ON)
innodb_file_format 的值改为 (Barracuda)
查看命令:show variables like ‘innodb_large_prefix’;
修改命令:set global innodb_large_prefix = ON;
查看命令:show variables like ‘innodb_file_format’;
修改命令:set global innodb_file_format = BARRACUDA;
第二步查看test表的配置信息:
主要看Row_format的值是不是Dynamic,
如果不是就修改成Dynamic
查看命令:show table status like’test’ \G
修改Row_format命令:ALTER TABLE test ROW_FORMAT=DYNAMIC;
第三步修改name字段长度由原来的255(或小于255的)改成大于255的例如:512修改表字段命令:ALTER TABLE test MODIFY COLUMN name VARCHAR(512);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值