irpas技术客

mysql5.6 批量设置表 ROW_FORMAT =DYNAMIC 的方法_DQZ_cool_mysql row_format=dynamic

网络投稿 6217

安装某个软件的时候提示

ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

后来发现是一些参数设置的问题,不知道mysql5.7会不会出现这个问题,没有测试大家可以直接升级到mysql5.7看能不能解决

解决方法是:

1: 系统变量innodb_large_prefix为ON

2: 系统变量innodb_file_format为Barracuda

3: ROW_FORMAT为DYNAMIC或COMPRESSED

将这三个变量设置为以上状态:

分别可以使用命令?

1)show variables like?'%innodb_large_prefix%';

2)show variables like?'%innodb_file_format%';

3)SELECT table_schema, table_name, row_format? FROM information_schema.TABLES? WHERE table_schema IN (?'数据库名') 【可以加筛选命令不是Dynamic的表?AND information_schema.TABLES.row_format <> 'Dynamic'】

查看参数状态如果参数状态不正确可以使用:

set?global innodb_large_prefix=on;

set?global innodb_file_format=Barracuda;

两个命令完成

问题是第三个修改比较麻烦,mysql5.6没有全局设置表为ROW_FORMAT为DYNAMIC或COMPRESSED的属性,所以得一个个修改,后来想了个办法,可以这样尝试操作:

1)可以通过命令

筛选出不等于Dynamic的表并生成更新语句

SELECT ?? ?CONCAT( "ALTER TABLE `", table_schema, "`.`", table_name, "` ROW_FORMAT =DYNAMIC ;" )? FROM ?? ?information_schema.TABLES? WHERE ?? ?table_schema IN ( '数据库名' ) AND information_schema.TABLES.row_format <> 'Dynamic'

将生成的语句批量执行就可以了!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #MySQL #1071 #42000 #specified #key #was