mysql5.7 this is incompatible with sql_mode=only_full_group_by錯誤


 

解決辦法:

https://blog.csdn.net/qq_42175986/article/details/82384160

 

前言:

           一、原理層面

           這個錯誤發生在mysql 5.7 版本及以上版本會出現的問題:

           mysql 5.7版本默認的sql配置是:sql_mode="ONLY_FULL_GROUP_BY",這個配置嚴格執行了"SQL92標准"。

           很多從5.6升級到5.7時,為了語法兼容,大部分都會選擇調整sql_mode,使其保持跟5.6一致,為了盡量兼容程序。

            

            二、sql層面

            在sql執行時,出現該原因:

            簡單來說就是:輸出的結果是叫target list,就是select后面跟着的字段,還有一個地方group by column,就是

            group by后面跟着的字段。由於開啟了ONLY_FULL_GROUP_BY的設置,所以如果一個字段沒有在target list

            和group by字段中同時出現,或者是聚合函數的值的話,那么這條sql查詢是被mysql認為非法的,會報錯誤。

     

     
  一、查看sql_mode的語句如下

 

select @@GLOBAL.sql_mode;

 
  二、解決方案-(推薦解決方案二)

 

  ①解決方案一:sql語句暫時性修改sql_mode

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

          問題:

                  重啟mysql數據庫服務之后,ONLY_FULL_GROUP_BY還會出現。

  ②解決方案二:完美解決方案。

       需修改mysql配置文件,通過手動添加sql_mode的方式強制指定不需要ONLY_FULL_GROUP_BY屬性,

       my.cnf位於etc文件夾下,vim下光標移到最后,添加如下:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

           重啟mysql服務,順利解決。


---------------------
作者:猿醫生
來源:CSDN
原文:https://blog.csdn.net/qq_42175986/article/details/82384160
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 

重啟mysql

  Debian / Ubuntu Linux

  1.啟動:/etc/init.d/mysql start

  2.停止:/etc/init.d/mysql stop

  3.重啟:/etc/init.d/mysql restart


免責聲明!

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



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