欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL5.7+版本,提示mysql1055错误,sql_mode=only_full_group_by问题解决办法

程序员文章站 2023-12-28 17:22:58
...

MySQL5.7+版本,提示mysql1055错误,sql_mode=only_full_group_by问题解决办法

MySQL5.7+版本

出现这个问题的原因是使用了group by。但是数据库有ONLY_FULL_GROUP_BY属性。解释下这个属性—>ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。

解决方案

5.6版本中没有这约束。MySQL5.7更高版本就有这个问题了。那我们直接去掉这个配置就可以了。

解决办法

在mysql配置文件中直接修改

建议采用这个方案,因为修改配置文件之后所有的数据库都会生效,而且重启数据库不会失效,但是必须重启一次数据库。

sudo vim /etc/my.cnf   //我的配置文件在这里

1.打开配置文件之后
可以直接在最后面添加配置信息
不同的版本配置有些许不一样
mysql5.7-8.0配置

sql_mode='NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'

mysql8.0以上版本配置(8.0以上已经取消了NO_AUTO_CREATE_USER这个关键字)

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' 

2.保存文件退出
3.重启mysql服务:service mysqld restart
完工

在数据库配置表中直接修改

1.登录mysql --> mysql -u root -p 输入密码选择数据库(use 你的数据库名称;)
2.执行:select version(), @@sql_mode;
出现如下信息

+-----------+-------------------------------------------------------------------
----------------------------------------------------+
| version() | @@sql_mode
                                                    |
+-----------+-------------------------------------------------------------------
----------------------------------------------------+
| 8.0.12    | ONLY_FULL_GROUP_BY ,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DAT
E,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------+-------------------------------------------------------------------

3.我们要修改的就是这个ONLY_FULL_GROUP_BY,将它去掉就好了。
SET sql_mode=(SELECT REPLACE(@@sql_mode,‘ONLY_FULL_GROUP_BY’,’’));
把ONLY_FULL_GROUP_BY去掉。
这里不需要重启,但是要注意只是对修改了配置的数据库生效。可以执行group by语句,但是用java操作的时候还是会报错。所以建议采用第一种方式

上一篇:

下一篇: