MySQL 错误代码:1055 解决方案(推荐!!)

article/2025/9/14 8:08:37

MySQL 错误代码:1055 解决办法

    • 一、 MySQL版本
    • 二、 问题描述
      • 1. 问题描述
      • 2.ONLY_FULL_GROUP_BY-SQL示例
    • 三、解决办法
      • 1.方法一
      • 2.方法二(临时)
      • 3.方法三(永久)
    • 四、sql_mode常用值

一、 MySQL版本

  • MySQL版本:8.0.11

二、 问题描述

1. 问题描述

  • 在查询时使用group by语句,出现错误代码:1055;
  • 执行发生错误语句:
SELECTt1.id,t1.`room_name`,t2.`room_id`,t2.`name`
FROMroom t1LEFT JOIN person t2ON t1.id = t2.room_id 
GROUP BY t1.id
  • 结果:
    在这里插入图片描述
    上图说 select表达式#4-t2.name不是聚合函数列,没有依赖group by 子句中的列,所以导致报错

2.ONLY_FULL_GROUP_BY-SQL示例

  • 在MySQL5.7之后sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。
  • ONLY_FULL_GROUP_BY:要求select语句中所查询出的列必须是在group by中进行声明,否则就会报错。简单的说来,在此模式下,select target list中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值。
-- 执行成功,因为select语句中的count()是聚集函数;
SELECTCOUNT(1)
FROMroom t1LEFT JOIN person t2 ON t1.id = t2.room_id
GROUP BY t2.name;-- 执行失败,因为*中包含主键id,而group by后的表达式中并没有包含两张表中的id
SELECT* 
FROMroom t1LEFT JOIN person t2 ON t1.id = t2.room_id 
GROUP BYt2.NAME-- 执行成功,将上句SQL改为如下:
SELECT* 
FROMroom t1LEFT JOIN person t2 ON t1.id = t2.room_id 
GROUP BYt1.id,t2.id-- 执行成功,因为t2.name包含在group by后的表达式中   
SELECTt2.NAME 
FROMroom t1LEFT JOIN person t2 ON t1.id = t2.room_id 
GROUP BYt2.NAME-- 该SQL执行失败,因为contact没有包含在group by后的表达式中
SELECTt2.name,t2.room_id
FROMroom t1LEFT JOIN person t2ON t1.id = t2.room_id
GROUP BY t2.name

三、解决办法

1.方法一

这种方法不需要修改任何配置文件,给不需要分组的字段上加上 any_value() 函数即可。

any_value:选择被分到同一组数据中的第一条数据的指定列值作为返回数据。

  • 示例:
SELECTt2.name,any_value(t2.room_id) AS room_id
FROMroom t1LEFT JOIN person t2ON t1.id = t2.room_id
GROUP BY t2.name

当然,这种对于已经开发了不少功能的项目不太合适,毕竟要把原来的sql都给修改一遍

2.方法二(临时)

这种方法只能暂时解决1055错误,当MySQL服务进行重启后就会失效,又得重新设置;

  1. 查询出所有的 sql_mode
select @@sql_mode

在这里插入图片描述

  1. 然后将查询结果中的ONLY_FULL_GROUP_BY移除后,再重新设置sql_model
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
  • 操作执行完成后就OK了

3.方法三(永久)

  • 直接通过修改MySQL的my.ini文件(如果是Linux则在my.cnf中),这样就算MySQL服务重启后也不会失效;
    在这里插入图片描述
  • 在my.ini文件中添加:
# 设置sql_mode,关闭ONLY_FULL_GROUP_BY,避免使用group by函数导致1055错误
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

在这里插入图片描述

  • 重启MySQL服务就OK,以管理员身份打开cmd窗口输入命令(不然可能会拒绝访问);
## 关闭mysql服务
net stop mysql 
## 开启mysql服务
net start mysql

四、sql_mode常用值

  1. ONLY_FULL_GROUP_BY:在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中,即只能展示group by的字段,其他均都要报1055的错;
  2. STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制;
  3. NO_AUTO_VALUE_ON_ZERO:影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
  4. NO_ZERO_IN_DATE: 在严格模式下,不接受部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入’0000-00-00’。在非严格模式,可以接受该日期,但会生成警告。
  5. NO_ZERO_DATE:在严格模式下,mysql数据库不允许插入零日期。它实际的行为受到 strictmode是否开启的影响2。
  6. ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL
  7. NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户
  8. NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
  9. PIPES_AS_CONCAT:将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
  10. ANSI_QUOTES:启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

如果觉得对你有帮助,就顺手给个赞吧。感谢! —— 转载请注明出处


http://chatgpt.dhexx.cn/article/DYKFJLxe.shtml

相关文章

MySQL 出现1055错误 this is incompatible with sql mode=only full group by 的解决办法

文章目录 一、打开MySQL8.0 Command Line Client二、找到MySQL的my.ini文件路径三、修改my.ini里面的内容 前言 在学习过程中出现的问题:IDEA与Navicat出现不兼容的情况 会弹出1055的错误,这种错误通常在mysql 5.7以上的版本才会出现 1055 Expression #…

MySQL查询出现1055错误的解决方法

当SQL语句查询报1055错误时的解决方法 报错内容如下 报错原因 1.SQL语句中使用了group by,并且不需要分组的字段没有加上any_value()函数 2.MySQL数据库版本是大于5.7,报错信息中最后有一句sql_modeONLY_FULL_GROUP_BY,是因为MySQL数据库的…

1055 习题4-9-3 逆序输出正整数各位上数字

题目描述 输入一个不多于5位的正整数,按逆序输出各位上的数字,末尾换行。 注意:确保输入的正整数的位数不多于5。 输入 一个不多于5位的正整数。 输出 逆序输出各位上的数字,中间以空格分隔。 注意末尾的换行。 样例输入 2143 样…

IDEA破解后老是出现agent弹窗问题

第一步:在1这个路径下早到2这个文件 2.用解压软件提取2这个文件META-INF里面的important.txt放到上面1这个目录下(这里使用的是7z解压)

Intellij IDEA 破解方法和地址

IntelliJ IDEA是来自捷克的Jetbrains公司开发的Java开发工具(完爆Eclipse/MyEclipse)。有旗舰版和社区版两大版本,相对社区版而言旗舰版的功能更加丰富。官网提供了两个版本之间差异的详细比较。擅长企业级应用、移动应用以及Web应用开发。 支持MacOS,Windows7,Lin…

idea破解办法

在安装后启动的时候,Activate new license with选择License server,填上http://idea.iteblog.com/key.php,如图所示: 点击Activate,然后就搞定了。

Intellij idea破解以及运行优化

Intellij idea破解以及运行优化 idea 破解: 方式一:服务器破解,这种方式比较快速,但是很不稳定,所以不推荐 方式二:在校学生或者教师都可以免费申请,申请网址:https://www.jetbrain…

IDEA破解后无法启动

在网上找了破解IDEA的方法 原文:https://blog.csdn.net/qq_38637558/article/details/78914772 ①到这个地方下载 IntelliJ IDEA 注册码:http://idea.lanyus.com/ ②然后将这个jar包放入bin目录下,bin目录下,你的idea安装后的…

Intellij idea破解2017

最开始的时候intellij用得是社区版,因为博主没有钱去买专业版。。。但是后来发现社区版的功能确实弱了很多,比如流弊闪闪的Diagrams功能就没有…比如社区版不支持web项目,想起个tomcat跑个web项目都没法搞。于是,博主重新下载了个…

IDEA破解

① 到这个地方下载 IntelliJ IDEA 破解补丁:http://idea.lanyus.com/ 就是这个jar包:JetbrainsCrack-2.6.10-release-enc.jar ② 然后将这个jar包放入bin目录下,bin目录下,你的idea安装后的bin目录下 ③ 然后还是在这个bin目录…

IntelliJ IDEA破解

今天写个IDEA破解,废话不多说,直接给网址 官网:https://www.jetbrains.com/idea/ 破解注册码:http://idea.lanyus.com/ 里面有永久破解,还有注册码,可你根据你的喜爱,来选择,今天…

如何卸载 IDEA 破解补丁 Betterintellij ?

如何卸载 IDEA 破解补丁 Betterintellij ? 开始卸载 Betterintellij 补丁 这个补丁被黑客篡改过,有安全风险,强烈建议小伙伴们卸载掉,以免对自己造成损失。怎么卸载呢?跟着下文操作即可。 开始卸载 Betterintellij 补丁 1、在 …

idea破解之后查看使用日期

help的里面很多按钮,重置查看使用日期

idea破解失败无法打开

今天在学习使用spring boot 写接口的时候发现idea过期了然后查了一下如何破解,破解到了重启这一步之后就无法打开了,重装了很多次也没有用之后查了很久资料终于解决了,写个博客记录一下。 首先我是通过idea修改了idea64.exe.vmoptions文件 这…

IntelliJ IDEA下载安装教程

目录 友情提醒第一章、IDEA软件下载1.1)官网下载 第二章、IDEA软件安装2.1)以"ideaIU-2018.3.3.exe"为例3.2)启动IDEA软件 友情提醒 点击文章目录可以跳转 第一章、IDEA软件下载 IDEA 全称 IntelliJ IDEA。在智能代码助手、代码…

idea破

百度下载一个 JetbrainsCrack-2.6.2.jar 破解补丁。放在你的安装idea下面的bin的目录下面。 下载链接:http://idea.lanyus.com/ 在安装的idea下面的bin目录下面有2个文件 : 一个是idea64.exe.vmoptions,还有一个是idea.exe.vmoptions 配置 …

Idea2023安装教程

Idea2023安装教程 下载方式Idea2023安装激活码验证添加中文 下载方式 1.百度网盘 链接:https://pan.baidu.com/s/1K2DP8sXsiC0E8PnwFeSQLQ?pwdoiv1 提取码:oiv1 2.官网下载 下载地址:https://www.jetbrains.com/ Idea2023安装 1.双击图标…

2021 IDEA最新版安装教程(可激活)

评论区 由于今天重新安装了系统,很多软件需要重装,这里给大家分享一下,如何进行IDEA最新版本的安装。 1:下载最新软件 官网地址:IDEA官网地址。 进去之后点击Download,进行下载。 这里可以选择不同的版本…

CSDN不支持idea破解版文章的发布

现在CSDN已经不支持关于idea破解文章的发布了。不仅如此,知乎,码云也都不支持了。 对你有帮助的话不妨点个赞再走吧

UEFI电脑安装Win7并激活

这几天正在好好享受暑假,没想到却陆续接到一些朋友的求助电话,要求帮忙解决一些电脑问题。对于这类电脑方面的问题,我一向是本着“小病重启、大病重装”的原则,不过既然是找到我这来的,一般也都是“大病”了&#xff0…