window系統下 解決MySQL 8報錯sql_mode=only_full_group_by: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標准"。

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

 在sql執行時,出現該原因:簡單來說就是:輸出的結果是叫target list,就是select后面跟着的字段,還有一個地方group by column,就是group by后面跟着的字段。由於開啟了ONLY_FULL_GROUP_BY的設置,所以如果一個字段沒有在target list和group by字段中同時出現,或者是聚合函數的值的話,那么這條sql查詢是被mysql認為非法的,會報錯誤。

2查看sql_mode

語句如下

select @@GLOBAL.sql_mode;

結果如下:

3、解決方案

需修改mysql配置文件,通過手動添加sql_mode的方式強制指定不需要ONLY_FULL_GROUP_BY屬性,my.cnf位於etc文件夾下(windows中為my.ini),在mysqld下添加如下:

sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

如下:

[client]
# 設置mysql客戶端默認字符集
default-character-set=utf8
 
[mysqld]
# 設置3306端口
port = 3306
# 設置mysql的安裝目錄
basedir=D:\install\mysql-8.0.26-winx64
# 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯
datadir=D:\install\mysql-8.0.26-winx64\data
# 允許最大連接數
max_connections=200
# 服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
log_bin_trust_function_creators=1
sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

重啟mysql服務,順利解決。 

 


免責聲明!

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



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