初遇Hibernate逆向的坑,The maximum column size is 767 bytes 暨 max key length is 1000 bytes

刚用hibernate生成时出现了max key length is 1000 bytes

查了下发现是Myisam引擎会有key长度的限制, 超过1000bytes就会报错,所以要将Mysql引擎修改为Innodb

结果看了下,生成表都是MyIsam要改死了,只能全删除,但删除数量也不少,找了个生成批量删除表的sql,还好表有共同前缀,方便不少。将生成的sql执行就好。

Select CONCAT( 'drop table ', table_name, ';' ) 
FROM information_schema.tables 
Where table_schema='mydatabase'  table_name LIKE ' sql_%';

现在回到正题解决这引擎问题从配置下手, 这问题出现在我要布署github上拉下来的开源项目,一般的话配置改成

org.hibernate.dialect.MySQL5Dialect

就没问题了,但这里不行需要改成 

org.hibernate.dialect.MySQL57Dialect

改完后就出现 The maximum column size is 767 bytes,看了下说是索引过长,这改起来比较麻烦,我的做法就是缩短下索引列的长度。一般utf8字符的话,改成255再创建索引就ok了,然后重启服务hibernate会跳过已经生成好的表。

以下是正规做法。

要先检查一下是不是数据库被限制了索引的大小
SHOW variables like 'innodb_large_prefix'

如果查询的值是OFF的话 执行下面命令,如果命令不起作用可以到 C:/programData/mysql/mysql5.6/my.ini 下加一句 innodb_large_prefix=1, 然后重启mysql服务

SET GLOBAL INNODB_LARGE_PREFIX = ON;

执行完了 之后 还得查看当前的innodb_file_format引擎格式类型是不是BARRACUDA

执行 SHOW variables like 'innodb_file_format'

如果不是的话则需要修改 SET GLOBAL innodb_file_format = BARRACUDA;

最后还需要更改表的结构:

alter table house_8090 row_format=dynamic;
alter table house_8090 row_format=compressed;

最后拾人牙慧也就不标原创了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值