MySQL问题解决:Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated

MySQL问题解决:Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated

问题还原:某次系统数据库迁移,配置了新的服务器作为mysql数据源,数据和原来的数据库保持一致;

结果:项目部署成功后group by 相关的sql语句报错,见标题。

原因: MySQL 配置中 sql_mode 默认配置了only_full_group_by,这样的话需要 GROUP BY 中包含所有 在 SELECT 中出现的字段

直观一些的话可以运行sql语句查询sql_mode 配置,查询语句如下:

SELECT @@sql_mode;

查询结果应该会包含ONLY_FULL_GROUP_BY
我这边查询结果如下:
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

解决方法如下:
1.运行SQL语句去掉ONLY_FULL_GROUP_BY配置,重新连接数据库。

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';

这个方法我试了下,重新连接之后可以正常查询,不过重启服务器的mysql的话,系统配置会还原。

2.直接更改mysql的配置文件,重启(一了百了)

一般是Linux服务器,就在配置文件(my.cnf)中修改 sql_mode 的配置(在/usr/local/etc/my.cnf路径下);

如果是Windows,就修改配置文件my.ini里对应的sql_mode 。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值