首页 > 技术文章 > MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案

chatpam 2018-12-27 17:10 原文

MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下:

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column '×××' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

描述:select的列都要在group中,或许本身是聚合列(SUM,AVG,MAX,MIN)才行

解决方案一:

这时我们可以通过navicat输入select @@global.sql_mode来查看当前数据库的sql_mode属性值

复制查询结果,去掉ONLY_FULL_GROUP_BY,重新赋值,执行成功后,就可以将ONLY_FULL_GROUP_BY模式默认设置为关闭状态,解决之前的sql报错问题

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'

但是这种方式设置的只是当前会话中的sql_model,服务器重启后,设置可能会失效,鉴于凡是重启之后都要手动去set @@global.sql_mode,所以比较麻烦

接下来介绍设置永久生效模式:
1.以下是window版本的:

找到mysql的安装目录,我的安装目录是 D:\software\mysql-5.7.24-winx64\mysql-5.7.24-winx64

之后重启mysql再去查询: select @@global.sql_mode 发现查询出来的值就是my.ini里面配置的sql_mode的内容

 

推荐阅读