MySQL5.7預設開啟ONLY_FULL_GROUP_BY模式問題與解決方案
阿新 • • 發佈:2018-12-27
MySQL5.7後將sql_mode的ONLY_FULL_GROUP_BY模式預設設定為開啟狀態,這樣一來,很多之前的sql語句可能會出現錯誤,錯誤資訊如下:
Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column '×××' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
描述:select的列都要在group中,或許本身是聚合列(SUM,AVG,MAX,MIN)才行
解決方案一:
這時我們可以通過navicat輸入select @@global.sql_mode來檢視當前資料庫的sql_mode屬性值
複製查詢結果,去掉ONLY_FULL_GROUP_BY,重新賦值,執行成功後,就可以將ONLY_FULL_GROUP_BY模式預設設定為關閉狀態,解決之前的sql報錯問題
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'
但是這種方式設定的只是當前會話中的sql_model,伺服器重啟後,設定可能會失效,鑑於凡是重啟之後都要手動去set @@global.sql_mode,所以比較麻煩
接下來介紹設定永久生效模式:
1.以下是window版本的:
找到mysql的安裝目錄,我的安裝目錄是 D:\software\mysql-5.7.24-winx64\mysql-5.7.24-winx64
之後重啟mysql再去查詢: select @@global.sql_mode 發現查詢出來的值就是my.ini裡面配置的sql_mode的內容