MySQL出现this is incompatible with sql_mode=only_full_group_by错误的解决办法

yizhihongxing

当使用MySQL的时候,我们可能会遇到以下错误提示:

Expression #N of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

造成这个错误的原因是MySQL默认开启了严格模式(strict mode),只有满足特定条件的GROUP BY查询才会通过,否则会抛出此错误。这在一些旧版本的MySQL中不会出现,但在较新的版本中却经常会出现。为了解决这个问题,我们需要进行如下操作。

解决办法

  1. 修改MySQL的配置文件

可以编辑MySQL配置文件,将sql_mode的值修改为其他值。比如我们可以将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的严格模式就被关闭了。要注意的是,这种方式需要登录MySQL的管理员账户,需要操作系统或服务器的管理员权限,如果使用的是共享主机,则可能无法进行这种修改。

  1. 使用GROUP BY时明确指定聚合函数

在进行GROUP BY查询时,我们需要确保SELECT列表中的所有列都是被聚合函数包裹的,或者都被列在GROUP BY之中。否则,可以手动指定聚合函数或者将列列在GROUP BY之中。比如以下查询是错误的:

SELECT column1, column2 FROM table1 GROUP BY column1;

正确的做法是:

SELECT column1, MAX(column2) FROM table1 GROUP BY column1;

或者:

SELECT column1, column2 FROM table1 GROUP BY column1, column2;

示例说明

示例1

使用GROUP BY时未聚合的字段未被列在GROUP BY之中,导致了该错误。假设我们有以下的查询语句:

SELECT department, AVG(salary) FROM employees GROUP BY department;

这一查询语句会计算每个部门(department)的平均工资(salary)。但是这个语句存在问题:我们在SELECT中选择了department和AVG(salary)这两列,其中salary并没有被聚合函数包裹。这个语句在严格模式下会失败,并且抛出上述的错误。

我们可以修改这个语句,让salary被包裹在AVG函数之中,或者将salary列在GROUP BY之中:

SELECT department, AVG(salary) FROM employees GROUP BY department, salary;

示例2

严格模式下的MySQL不允许在INSERT或UPDATE语句中插入空字符串(''),这时会抛出错误:Error: Data too long for column 'xxxxx' at row 1。我们需要将所有的空字符串都替换为NULL,以便解决这个问题。比如:

UPDATE table1 SET column1=NULL WHERE column1='';

这个语句会将表table1中的column1=''的记录全部更新为NULL。此时我们可以插入或更新NULL值了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL出现this is incompatible with sql_mode=only_full_group_by错误的解决办法 - Python技术站

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

相关文章

  • Mysql exists用法小结

    接下来我将详细讲解 Mysql exists用法小结,帮你全面了解这个用法的使用方法和示例。 什么是 Mysql exists用法? Mysql exists用法是一种用于判断子查询结果是否存在的方式。Mysql exists用法通常和 Mysql 子查询同时使用。它可以将一个查询语句嵌套在另一个查询语句内,来判断该查询语句返回的结果是否存在。 如果子查询返…

    database 2023年5月22日
    00
  • Windows下MySQL详细安装过程及基本使用

    下面我将详细讲解一下“Windows下MySQL详细安装过程及基本使用”的完整攻略。 Windows下MySQL详细安装过程及基本使用攻略 1. 下载MySQL Installer 在安装MySQL之前,我们首先需要下载MySQL Installer。 我们可以前往MySQL官网,从官网的下载区域下载MySQL Installer。 2. 安装MySQL 下…

    database 2023年5月22日
    00
  • SQL 找出不匹配某个格式的文本

    如果要找出不符合某个特定格式的文本,可以使用SQL中的正则表达式来实现。具体步骤如下: 1.使用Not Like操作符 使用Not Like操作符可以查找不匹配某个特定格式的文本,语法如下: SELECT column_name FROM table_name WHERE column_name NOT LIKE pattern; 其中,column_nam…

    database 2023年3月27日
    00
  • mysql charset=utf8你真的弄明白意思了吗

    MySQL中的charset指的是字符集,用来存储和处理数据中的各种字符,包括汉字、英文、数字等。而UTF-8是一种Unicode字符集编码方式,支持多种语言字符,包括中文、日文、韩文等,是目前最常用的字符集之一。 在MySQL中,可以使用以下命令进行设置: SET NAMES utf8; SET CHARACTER SET utf8; 这两条命令都是用来设…

    database 2023年5月22日
    00
  • mssqlserver恢复ldf文件数据的方法

    Mssqlserver恢复ldf文件数据的方法 在Mssqlserver数据库中,ldf文件是事务日志文件,记录了数据库中每个事务的详细操作信息。如果由于意外等原因导致数据丢失,可能会用到ldf文件进行恢复。本篇攻略将介绍如何通过ldf文件恢复数据。 1.备份数据库 在使用ldf文件进行数据恢复之前,建议先备份数据库,以防意外发生。可以使用Mssqlserv…

    database 2023年5月18日
    00
  • MongoDB删除数据库

    MongoDB是一个非关系型数据库,大多数MongoDB的操作是基于文档的,删除数据库也不例外。下面我们详解MongoDB删除数据库的完整攻略,包含代码示例。 停用服务 在删除MongoDB数据库之前,我们需要停用MongoDB服务。在Windows下我们需要打开命令行窗口并输入以下命令,将MongoDB服务停用: net stop MongoDB 进入Mo…

    MongoDB 2023年3月13日
    00
  • Redis+AOP+自定义注解实现限流

    Redis + AOP + 自定义注解实现限流的攻略分为以下几个步骤: 1. 集成 Redis Redis 是一种基于内存的数据存储系统,它可以高效地存储和操作数据,特别适合用于缓存和限流等场景。我们首先需要将 Redis 集成到项目中。 可以使用官方的 Java 客户端 Jedis 来访问 Redis。在 Maven 中引入 Jedis 的依赖,并配置 R…

    database 2023年5月22日
    00
  • linux 之centos7搭建mysql5.7.29的详细过程

    下面是“Linux 之 CentOS7 搭建 MySQL 5.7.29 的详细过程”完整攻略: 1. 安装 MySQL 1.1 下载并安装 MySQL 的官方 YUM Repository sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 1…

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