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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM