当前位置:   article > 正文

MySQL 1055报错 -this is incompatible with sql_mode=only_full_group_by

MySQL 1055报错 -this is incompatible with sql_mode=only_full_group_by

遇到问题

group by报错
在这里插入图片描述
报错什么意思呢?
一句话概括:“错误代码1055与sql_mode = only_full_group_by不兼容”

原因分析

一、原理层面
这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题:
mysql 5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。

二、sql层面
在sql执行时,出现该原因,简单来说就是:
由于开启了ONLY_FULL_GROUP_BY的设置,如果select 的字段不在 group by 中,
并且select 的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法的,会报错误…

数据表结构

在这里插入图片描述

SELECT Cno,COUNT(Sno)  
FROM SC
GROUP BY Cno;

SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(Cno) >= 3;

SELECT Sno,AVG(Grade),Cno
FROM SC
GROUP BY Sno
HAVING AVG(Grade) >= 90;

SELECT VERSION();

SELECT @@GLOBAL.sql_mode;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

解决方案

1)查看mysql的sql-mode设置
使用命令 mysql -u username -p 进行登陆,然后输入密码,输入SQL:

show variables like%sql_mode’;
  • 1

但是我用这个方法没用
我用这个语句查的

SELECT @@GLOBAL.sql_mode;
  • 1

显示类似这样
在这里插入图片描述

2) 修改mysql 配置文件,追加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
  • 1
root@0b4555d48ccd:/# cat /etc/mysql/conf/my.cnf
cat: /etc/mysql/conf/my.cnf: No such file or directory
root@0b4555d48ccd:/# cat /etc/mysql/my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

# 解决group by
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2)重启MySQL服务

service mysql restart
  • 1

3)查询配置是否成功
使用命令 mysql -u username -p 进行登陆,然后输入密码,输入SQL:

show variables like ‘%sql_mode’;

在这里插入图片描述
我继续用SELECT @@GLOBAL.sql_mode; 查的,显示这样

在这里插入图片描述

Windows下也是修改这个配置文件,追加这个设置就行了

mysql装在了docker容器里面,进入后按照这位博主的配置修改好了
https://blog.csdn.net/u012660464/article/details/113977173
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/899483
推荐阅读
相关标签
  

闽ICP备14008679号