当前位置:网站首页>在Ubuntu/Linux环境下使用MySQL:修改数据库sql_mode,可解决“this is incompatible with sql_mode=only_full_group_by”问题
在Ubuntu/Linux环境下使用MySQL:修改数据库sql_mode,可解决“this is incompatible with sql_mode=only_full_group_by”问题
2022-08-09 00:20:00 【女儿控伪全栈老徐】
操作系统: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服务,请恢复该文件后重新尝试。
边栏推荐
猜你喜欢
随机推荐
一道dp的三次优化(时间+空间)
有人负责,才有质量:写给在集市中迷失的一代
cmd切换硬盘的命令,从C盘切换到D盘怎么操作
JS data types
pc端电脑屏幕常见尺寸
MySQL5.7设置MySQL/MariaDB 数据库默认编码为utf8mb4
Why software development methodology make you feel bad?
为什么依赖注入出现的频率这么高?
进阶指南图论篇
灰色预测模型
【全排列】
透明度混合-Blend
supervisor 安装、配置、常用命令
The difference between MVC and MVP
There is quality when someone is in charge: to a generation lost in the market place
#468. 函数求和
如何选择云服务器与轻量应用服务器?谈谈自己的看法
架构组学习总结
凹凸映射Bump_Mapping
XShell用命令行打包jar包(详细步骤)