MySQL错误提示:sql_mode=only_full_group_by完美解决方案

MySQL错误提示:sql_mode=only_full_group_by 是在 MySQL 5.7 版本中引入的一个新特性。当开启该模式时,如果使用了GROUP BY语句但是SELECT语句中的列名没有在GROUP BY中出现,或者在SELECT语句中使用了聚合函数,但是列名并不在GROUP BY语句中,则会抛出“1055 error - 'XXXX' isn't in GROUP BY”的错误提示。这也导致了很多老版本MySQL数据库运行原有的SQL脚本时报错的问题。

下面介绍 “MySQL错误提示:sql_mode=only_full_group_by”的完美解决方案:

一、查看当前的sql_mode设置

首先,我们需要查看当前MySQL数据库的SQL_MODE设置。在MySQL客户端中输入以下命令:

SELECT @@SESSION.sql_mode;

会返回如下的sql_mode:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

这就是当前MySQL数据库的SQL_MODE设置,其中包含了 “ONLY_FULL_GROUP_BY” 模式。

二、修改MySQL配置文件

在MySQL的配置文件中修改sql_mode即可解决该问题。

首先,编辑MySQL的配置文件my.cnf或my.ini(Windows中)。在Ubuntu服务器中可以使用以下命令查找my.cnf的位置:

sudo find / -name "my.cnf"

然后,找到配置文件中的 [mysqld] 模块下的sql_mode参数,并将其修改为:

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服务,操作完毕。

例如,在CentOS服务器中,MySQL的配置文件为 /etc/my.cnf,则编辑该文件:

sudo vi /etc/my.cnf

将如下的代码:

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

修改为:

[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服务:

sudo systemctl restart mysqld

三、示例说明

示例1:新项目开发问题

当开发一个新项目时,使用了groupby语句以及聚合函数,为了查询按照时间统计结果,我们先使用groupby按照时间分组但是并不需要对时间字段再做聚合操作,此时依据 sql_mode=only_full_group_by。会收到如下错误提示:

1055 error - 'Date' isn't in GROUP BY

解决方案如下:

  1. 通过执行 SELECT @@SESSION.sql_mode; 命令查看SQL模式。
  2. 在 MySQL 配置文件 my.cnfmy.ini 里(具体路径取决于你的环境和MySQL的安装位置)查找 sql_mode 的设置项,将这一项的值修改为 STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  3. 重启 MySQL 服务器,如 systemctl restart mysqld.service

示例2:老项目运行问题

有一个老项目的部分SQL语句不符合SQL Mode的要求,执行SQL语句会抛出 “1055 error - 'XXXX' isn't in GROUP BY”的错误提示,而且为了维护方便并不想修改SQL语句,可以采用更改MySQL配置文件的方法来解决问题。我们可以在MySQL配置文件中增加下面两行的 SQL_MODE,来适应老项目运行所需 SQL_MODE 的模式:

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

"only_full_group_by" 加回 sql_mode 中;这样在 MySQL 安装服务之后就能自动设置 SQL_MODE 的值。这样,老项目的SQL语句就可以正常运行,而开发新项目时由于也将 only_full_group_by 加回来,就避免出现 sql_mode=only_full_group_by 的错误提示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL错误提示:sql_mode=only_full_group_by完美解决方案 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • mysql,获取当天0点0分的日期和23点59分59秒的日期

    当前日期23:59:59 SQL:SELECT DATE_SUB( DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY),INTERVAL 1 SECOND) 如图:   当前日期往前推14天00:00:00零点零分的时间 sql:SELECT DATE_SUB(DATE_FORMAT(CURDATE(),’%Y-%m-%d %H:%…

    MySQL 2023年4月13日
    00
  • mysql 错误号码1129 解决方法

    当使用mysql创建新用户、指定用户的授权或取消用户的授权时,有时会遇到“错误号码1129”的提示信息。这种情况下,我们需要先了解一下这个错误的含义及出现的原因,而后再针对具体情况选择相应的解决方法。 什么是“错误号码1129”? “错误号码1129”指的是MySQL中的一个错误码。它的具体内容是:“Host ‘xxxxx’ is blocked becau…

    MySQL 2023年5月18日
    00
  • 中国省市区数据mysql脚本

    2.查市 3.查区 4.Mysql脚本 /* Navicat MySQL Data Transfer Source Server : MySQL Source Server Version : 50022 Source Host : 127.0.0.1:3306 Source Database : xlj Target Server Type : MYSQL…

    MySQL 2023年4月13日
    00
  • Mac和Windows系统下Mysql数据库的导入导出

      最近在构建数据库的过程中,需要将Mac os系统下的Mysql数据库导出成.sql文件,然后导入到windows系统下的Mysql中。经过学习总结出的步骤如下:   一、Mac os导出Mysql数据库   1.打开终端,   2.执行: cd 要导出到的目录  (如:cd /Users/Malcolm/Desktop)   3.执行:mysqldump…

    MySQL 2023年4月13日
    00
  • 解决MySQL8.0安装第一次登陆修改密码时出现的问题

    针对MySQL 8.0安装第一次登录修改密码时出现的问题,我为您提供以下完整攻略: 问题描述 在MySQL 8.0进行第一次登录并修改密码时,可能会出现因密码安全等级问题而不能更新密码的情况。具体的错误信息为:Your password does not satisfy the current policy requirements。 解决方案 1. 临时修…

    MySQL 2023年5月18日
    00
  • MySQL进阶之索引

    MySQL进阶之索引 索引的作用 索引是一种数据结构,能够极大地提高数据库的查询效率。在使用索引后,查询时若不经过索引扫描,则可以直接在索引中找到相应的记录,从而加速查询过程。索引一般用于高效查询特定条件下的数据。 常见的索引类型 MySQL中常见的索引类型有以下几种: B-Tree索引:B-Tree是指支持节点分裂和合并的一种树状结构,常用于磁盘存储系统或…

    MySQL 2023年5月19日
    00
  • MySQL 主从延迟的常见原因及解决方法

    承蒙大家的支持,刚上市的《MySQL实战》已经跃居京东自营数据库图书热卖榜第 1 名,收到的反馈也普遍不错。对该书感兴趣的童鞋可通过右边的链接购买。目前,京东自营有活动,只需 5 折。 主从延迟作为 MySQL 的痛点已经存在很多年了,以至于大家都有一种错觉:有 MySQL 复制的地方就有主从延迟。 对于主从延迟的原因,很多人将之归结为从库的单线程重放。 但…

    MySQL 2023年4月19日
    00
  • MySQL下常见的启动失败与备份失败问题的解决教程

    MySQL是一种常用的关系型数据库管理系统,在使用过程中可能会遇到一些启动失败及备份失败的问题,下面是对这些问题的解决教程。 MySQL启动失败问题的解决 问题一:端口被占用导致启动失败 当启动MySQL时,可能会出现端口被占用的错误提示,具体表现为: ERROR 2002 (HY000): Can’t connect to local MySQL serv…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部