在Ubuntu/Linux环境下使用MySQL:修改数据库sql_mode,可解决“this is incompatible with sql_mode=only_full_group_by”问题

操作系统:Ubuntu 18.04 64位

MySQL版本:MySQL 5.7

一、问题描述

在本次发现的这个问题中,其原因是业务系统在对某张数据库表进行查询的时候,对查询结果做了group by操作,并且根据业务数据的记录创建时间进行了排序。

在执行查询的时候,MySQL就会抛出一条错误:

this is incompatible with sql_mode=only_full_group_by

由于在大部分业务系统中,对记录的创建时间排序是非常常见的操作方式,但是很少会将记录的创建时间放入group by子句中,这样group by就失去了意义。所以我们不能选择修改SQL查询语句来解决这一问题。

二、问题原因

引发这一问题的原因非常简单,由于在MySQL5.7及以上版本,默认在数据库服务的sql_mode设置中,增加了以下配置:

ONLY_FULL_GROUP_BY

就是这一设置导致了问题的发生。在MySQL5.7及以上版本中,当数据库安装完成后,sql_mode的这一设置就默认生效了。我们可以通过以下差需语句来确认自己当前数据库中的sql_mode配置:

select @@GLOBAL.sql_mode;

查询的结果如下所示,这是已经完成了修改后的配置,其中已经看不到ONL_FULL_GROUP_BY的配置项了。:

三、解决办法

3.1修改my.cnf配置文件

在Linux环境下,my.cnf配置文件位于系统etc目录下:

在上图的示例中,“my.cnf“被指向了位于目录“/etc/alternatives”下的同名文件,因此我们需要转到该目录下,并打开该文件:

然后在文件的末尾,输入以下内容:

[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服务即可。

传送门:在Ubuntu/Linux环境下使用MySQL:启动和关闭MySQL服务

注意:在修改my.cnf文件前,请将它妥善备份。如果修改完毕后,无法正常启动MySQL服务,请恢复该文件后重新尝试。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值