修改数据库sql_mode,解决“this is incompatible with sql_mode=only_full_group_by”报错

本文详细介绍了在MySQL5.7中启用严格模式时,如何通过修改全局配置和my.cnf文件来解决GROUPBY报错,确保非聚合字段在SELECT中正确处理。
摘要由CSDN通过智能技术生成

Linux下修改数据库sql_mode,解决“this is incompatible with sql_mode=only_full_group_by”报错及其他关于sql_mode报错

问题描述报错信息

在MySQL 5.7后,MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。如果代码中含有group by聚合操作,那么select中的列,除了使用聚合函数之外的,如max()、min()等,都必须出现在group by中,因此如果想要在select中的字段名包含除了聚合函数以及group by使用的列
那么就必须修改sql_mode中的ONLY_FULL_GROUP_BY。

解决方案(直接上方法):

方法一 修改全局配置:
1.登录mysql:
mysql -u root -p
2.查询设置GLOBAL.sql_mode

select @@global.sql_mode;

刚安装完mysql后默认模式配置如图:
查询出安装完mysql默认配置如图
3.设置GLOBAL.sql_mode,

SET GLOBAL 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_mode:

select @@global.sql_mode;

在这里插入图片描述
可以看到已经成功修改
但是!!这种方法会在重启数据库后失效,需要再次修改!!

方法二 修改mysql配置文件:
修改my.cnf配置文件
进入到linux系统的/etc/mysql目录下,查看当前目录下文件,可以看到my.cnf文件被链接到了/etc/alternatives/my.conf

cd /etc/mysql/
ll

在这里插入图片描述
使用文本编辑器编辑该文件,我系统是ubuntu安装了vim,没有的话可以使用系统自带的nano编辑器:

vim my.cnf 

在末尾添加如下两行字符:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在这里插入图片描述
退出保存即可,然后重启mysql服务

service mysql restart
service mysql status

在这里插入图片描述
最后登录mysql检查一下:
mysql -u root -p
查询设置GLOBAL.sql_mode

select @@global.sql_mode;

在这里插入图片描述
可以看到已经成功修改

这样再次执行GROUP BY 就不会报错了,同理修改其他的sql_mode配置参数一样可以按照上面步骤来。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值