Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ..... this is incompatible with sql_mode=only_full_group_by
一、分析原因
ONLY_FULL_GROUP_BY 的意思是:对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的,因为列不在 GROUP BY 从句中,也就是说查出来的列必须在 group by 后面出现否则就会报错,或者这个字段出现在聚合函数里面。
命令行执行:
1 SELECT @@SESSION.sql_mode;
发现:
1 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
第一项默认开启 ONLY_FULL_GROUP_BY 。
二、解决方案
1、临时解决方案
关掉 ONLY_FULL_GROUP_BY!
1 set @@GLOBAL.sql_mode=''; 2 set 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 重启之后就会失效。
2、永久解决方案
修改 my.ini 或 my.cnf 配置(如果你们 mysql 没有这个文件,就把 my-default.ini 改成 my.ini)
分别在 [mysqld] 和 [mysql] 下面添加:
1 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。
纸上得来终觉浅,绝知此事要躬行。