微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

安装某个软件的时候提示

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 @R_165_4045@ion_schema.TABLES 
WHERE table_schema IN ( '数据库名') 【可以加筛选命令不是
Dynamic的表 AND @R_165_4045@ion_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,"`.`","` ROW_FORMAT =DYNAMIC ;" ) 
FROM
    @R_165_4045@ion_schema.TABLES 
WHERE
    table_schema IN ( '数据库名' ) AND @R_165_4045@ion_schema.TABLES.row_format <> 'Dynamic'

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐