zoukankan      html  css  js  c++  java
  • mysql 执行报错:Error querying database. Cause: java.sql.SQLSyntaxErrorException:which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    1.这个错误发生在mysql 5.7 版本及以上版本会出现的问题:

           mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY",这个配置严格执行了"SQL92标准"

    2.在sql执行时,出现该原因:

            简单来说就是:输出的结果是叫target list,就是select后面跟着的字段,还有一个地方group by column,就是

            group by后面跟着的字段。由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list 

            和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误。

    3.解决方法

      1)可以采取临时解决方法,但mysql重启后仍然会报这个错误    

        查看版本号:select version();

        

         可以看到我的版本是5.7版本以上的,

         查询模型:SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode; 

          

         可以看到mysql的配置是含有sql_mode="ONLY_FULL_GROUP_BY"的,

        接下来执行以下4条sql语句即可解决:   

    set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
    
    set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    
    set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    
    set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    

      2)最终解决办法

        修改MySQL的配置文件

        我是在linux服务上用docker安装的mysql,进入mysql容器中,进入/etc/mysql目录下修改my.cnf文件 在 [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

        但是经过我cat my.conf 发现此配置文件并没有[mysqld]这一项 看到配置文件中引入了/etc/mysql/conf.d/, /etc/mysql/mysql.conf.d/两个目录中的文件

            

              经过查看 在引入的文件mysql.conf.d文件夹下有个mysqld.cnf文件中含有[mysqld]配置 便在该配置文件中加入上述的配置,保存之后重启mysql容器

             这样便可永久解决问题

    ps:不同的系统,mysql 的配置文件名以及路径不同

          1、Mac或Linux文件  /etc/my.cnf

          2、windows 在数据库安装目录下的 my.ini

  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/chcha1/p/12996860.html
Copyright © 2011-2022 走看看