mysql8.0+版本在使用group by 出现的问题
起因:
由于想使用MySQL8中的函数,手动将项目中的数据库从5.7升级到了8.0.20 社区版本,但是升级完之后部分查询报错了,错误信息如下
which is not functionally dependent on columns in GROUP BY clause; this is incompatible withsql_mode=only_full_group_by
去搜了一下,推荐的几篇都说是需要修改配置文件,按照文章提示的操作了,结果重启就报错,仔细比对了才发现文章里的配置项加了单引号,而且还有多余的空格,简直是害人。这里记录一下,希望能帮到刷到这篇文章的你。
解决:
-
在客户端或者服务器连上MySQL后输入
SELECT @@sql_mode;
,得到结果集如下:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
-
这里我们去掉
ONLY_FULL_GROUP_BY
,然后去修改配置文件my.cnf
,在[mysqld]
下添加一行sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
-
重启MySQL服务器,这里我是直接通过命令方式,或者添加了service可以通过service 重启
#关闭命令 /home/mysql8/bin/mysqladmin -uroot -p shutdown #启动命令 /data/software/mysql8/bin/mysqld_safe --defaults-file=/data/software/mysql8/my.cnf &