问题描述:使用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