项目开发中,有个逻辑要用到group by,执行的时候,提示报错:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated
column 'novo_chatbot.web_users.id' which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
字面意思就是:
SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列“novo_chatbot.web_users.id”,
该列在功能上不依赖于GROUP BY子句的列;
这与sqlmode=only_full_group_by不兼容
一百度一个准,查看官方文档,也发现从 MySQL 5.7.5 开始,默认 SQL 模式包括 ONLY_FULL_GROUP_BY。 (在 5.7.5 之前,MySQL 不检测函数依赖,并且默认不启用 ONLY_FULL_GROUP_BY。)这可能会导致一些sql语句失效。
直接解决吧,我本地用的homestead,先根据文档说的查看一下本地的数据库的配置,进入数据库,输入命令
show variables like 'sql_mode';
确实sql_mode=ONLY_FULL_GROUP_BY。这时候要么修改这个配置,要么就是把mysq版本降下来,果断选择改配置;
找到homestead中mysql的配置文件,并修改:
进入配置文件所在目录
/etc/mysql/mysql.conf.d/ mysqld.cnf
(备注:一般mysql的配置是在vim /etc/mysql/conf.d/mysql.cnf
,homestead有自己的路径)
若是有sql_mode配置项直接将ONLY_FULL_GROUP_BY去掉。但我并未找到sql_mode的配置,那我就直接在配置文件里,加上这个配置试试吧
sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
保存之后,执行命令service mysql restart
重启mysql即可
为了确保配置生效,我再查看一下,生效了:
然后我再使用group by 就正常了,大功告成,又活了一天