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 。