您的位置:首页 > 数据库 > MySQL

mysql5.7.9新特性this is incompatible with sql_mode=only_full_group_by

2018-03-02 09:58 916 查看
mysql5.7.9比之前mysql5.6版本多了些新特性,同时也引发了sql_mode=only_full_group_by问题,这是因为查询时使用了group by引起,错误大概提示如下:
MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxxx.x.xxxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

今天我也遇到这个问题,网上找了很多资料,大部分方法只是临时解决了,一旦服务器重启,问题又出现了。导到这种报错主要是mysql服务器默认开启了only_full_group_by,只有关闭才可以正常使用分组查询,免得我们一条条去修改sql语句,工作量太大了,也不靠谱。

下面方法是永久的关闭only_full_group_by,在关闭之前,先进入mysql命令查看原先的sql_mode,在原先这个值的基础上去掉ONLY_FULL_GROUP_BY字符串即可。
代码如下
# mysql -u root -p
# 输入密码
mysql> select @@sql_mode;
显示:
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
第一个单词就是 ONLY_FULL_GROUP_BY,只要我们在mysqld.cnf配置里去除就可以永久关闭这个模式,具体操作如下:

1、找到mysql的配置文件mysqld.cnf,如果不知道在哪里就使用搜索命令
代码如下
# find / -name mysqld.cnf
2、进入编辑状态
代码如下
# vi /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 最底部新增这段代码,意思就是关闭only_full_group_by
代码如下
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
3、保存mysqld.cnf,并重启mysql服务,然后尝试写条含有group by的分组查询语句试试。没问题之后,再重启服务器,在查询试试,相信会令你满意的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐