刚用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;