记一次索引过长的问题

问题描述:使用esjob  的数据库自动记录job运行情况,表和记录都有esJob  自动创建和插入数据。在测试和本地环境均没有问题:生产爆出如下异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes

解决: 异常信息表明索引过长,查看表上建立索引的字段.

  • show index from tableName; 查看索引的每个字段的长度。索引类型:normal  普通索引,unique :唯一索引:FULLTEXT:全文索引,SPATIAL:空间索引。 InnoDB:引擎只支持normal  unique  两种索引类型
  • mysql  单列索引的最大长度是767 bytes,utf-8  编码最大支持列的长度为255,即varchar(255);
  • 如果列编码改为utf8mb4, 则单列的最大长度为191,超过则会报异常。

解决:0、编码改为utf-8,字段长度不超过255.

  • 1、修改数据库相关参数:
  • show variables like '%innodb_large_prefix%' 查看是否打开
  • set global innodb_large_prefix=on;
  • show variables like '%innodb_file_format%';
  • innodb_file_format  改为Barracuda;
  • set  global innodb_file_format=Barracuda;
  • set global innodb_file_format_max=Barracuda;
  • 打开之后索引的最大长度为 3072 bytes
  • 2.将索引改为前缀索引。
  • 参考:https://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值