从MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,规则核心原则如下
,没有遵循原则的sql会被认为是不合法的sql
1. order by后面的列必须是在select后面存在的
2. select、having或order by后面存在的非聚合列必须全部在group by中存在
查看MySQL的sql_mode:
mysql> select @@GLOBAL.sql_mode;
![](https://img-blog.csdnimg.cn/2020120216153774.png)
1.命令行输入:
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';
上面是针对全局sql_mode,对于新建的数据库有效。对于已经存在的数据库,需要在对应的数据库下执行:
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';
这样
只是session级别的,在mysql重启后,还是会有ONLY_FULL_GROUP_BY;
2.
改my.cnf 配置
在 [mysqld]和[mysql]下添加
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'
重启服务:service mysqld restart