date: 0629
问题背景:
是 mysqldump 导出的备份,恢复到新安装的 MySQL 5.7.17 上,因为默认参数配置出现一些问题:
1,sql_mode=only_full_group_by问题
2,表名大小写敏感问题
1, 发现 java 日志报错:
java 报错
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'dangdi_v15.dd_noticetoplate.sortOrder' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
网查解决方法 :执行SET GLOBAL sql_mode = ''; 把sql_mode 改成非only_full_group_by模式。
验证是否生效 SELECT @@GLOBAL.sql_mode 或 SELECT @@sql_mode。
查看当前默认的 sql_mode:
mysql> select @@global.sql_mode\G
*************************** 1. row ***************************
@@global.sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
修改 mysql 配置文件,修改 sql_mode:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重启 mysql
也可先在线修改使得及时生效:
SET @@GLOBAL.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
老数据库的 sql_mode:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2,表名大小写敏感问题
由 java 的日志报错,发现新库对表名大小写敏感:
查看方法:
SELECT @@GLOBAL.lower_case_table_names
修改方法:
及时生效:
SET @@global.lower_case_table_names=1
长久生效:
配置文件中添加:lower_case_table_names=1,然后重启 MySQL