• 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完美解决方案

  • 相关阅读:
    【Python深度学习】深度学习框架Tensorflow、Pytorch介绍
    企业在线培训场景下讲师+ppt课件直播应用效果
    工艺防错指导、可视化工具管理——SunTorque智能扭矩系统
    【Unity精华一记】特殊文件夹
    红日靶场五(vulnstack5)渗透分析
    [附源码]计算机毕业设计JAVA基于JSP的美妆购买网站
    第二章 进程与线程 十九、死锁的概念
    实现vue项目和springboot项目前后端数据交互
    黑马redis学习记录Ⅲ SpringDataRedis客户端
    非零基础自学Java (老师:韩顺平) 第6章 数组、排序和查找 6.4 数组应用案例 && 6.5 数组赋值机制 && 6.6 数组拷贝
  • 原文地址:https://blog.csdn.net/qq_41398619/article/details/126914901