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。

 

纸上得来终觉浅,绝知此事要躬行。

 

参考链接:https://www.cnblogs.com/756623607-zhang/p/9451257.html

posted @ 2019-07-18 13:42  白衣如风  阅读(104)  评论(0)    收藏  举报