一、背景:
本来已经正常运行的平台,突然有一天由于对服务器进行部分操作迁移,发现jar可以正常启动,但是访问功能一直报错,监控后台日志后,发现了问题:
报错的具体信息如下:
Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'frae.p.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
二、问题分析:
通过对问题的查找分析,字面意思理解:
SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列“grades.order_id” 它在功能上不依赖于
GROUP BY 子句中的列; 这与 sql_mode=only_full_group_by 不兼容使用GROUP BY 语句违背了sql_mode=only_full_group_by。因为mysql版本5.7之后默认的模式是ONLY_FULL_GROUP_BY。
查看官方文档,发现从 MySQL 5.7.5 开始,默认 SQL 模式包括 ONLY_FULL_GROUP_BY。 (在 5.7.5 之前,MySQL 不检测函数依赖,并且默认不启用 ONLY_FULL_GROUP_BY。)这可能会导致一些sql语句失效。
三、处理方法:
方法一:
MySQL查询、设置配置:
-
查看参数:SHOW VARIABLES WHERE variable_name like '%sql_mode%';
-
设置参数: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';
-
刷新配置:flush privileges;
flush privileges;
按照步骤一理论上就可以解决该问题
方法二:
通过更改my.cnf实现。本质上和2是一样的,都是关闭ONLY_FULL_GROUP_BY模式
我是通过yum安装的,安装手册在这里,需要的朋友可以用,传送门:超详细的yum方式安装mysql_yum在线安装mysql-CSDN博客
如果my.cnf中有sql_mode配置,则将ONLY_FULL_GROUP_BY去掉。
如果没有,直接编辑 /etc/my.cnf,在文件的最后加上:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启数据库即可:
systemctl restart mysqld.service
然后可以看配置,已经更新为更改后的内容,然后就可以愉快的使用了
本文推荐使用方法二
https://www.jb51.net/article/251380.htm