赞
踩
当运行带GROUP BY
子句的sql语句时,会出现如下错误:ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'commodity.a.xsjg' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
。
mysql8.0.19版本默认开启了only_full_group_by模式,但开启了这个模式后,如果使用group by会报上述的错误。为了解决上述的错误,把这个模式从变量sql_mode
中移除是一种解决方案。
一、在mysql客户端中修改sql_mode变量
查看变量sql_mode
select @@global.sql_mode;
查询出来的结果为:
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
去掉ONLY_FULL_GROUP_BY,重新设置sql_mode变量的值
set @@global.sql_mode=
'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
上述是改变了全局sql_mode,但仅对新建的数据库有效。为了对已存在的数据库有效,则需要使用use 数据库名
在对应的数据库下执行:
set sql_mode=
'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
二、在my.ini(Linux下是my.cnf)配置文件中修改sql_mode项
在配置文件 my.ini 中,添加如下内容,注意,sql_mode项中的值删掉了only_full_group_by,其余值可以在mysql客户端中查询而得:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
修改完后,需要重启MySQL服务器,重启服务器后,再执行带group by子句的sql语句,如果sql语句没有其他问题,应该能够顺利执行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。