配景
项目开辟中,有个逻辑要用到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 就正常了,大功告成,又活了一天
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |