MySql 5.7+ ONLY_FULL_GROUP_BY 引發問題解決方法
阿新 • • 發佈:2019-01-02
一般都是使用group by 引發的異常
-Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘###’…
this is incompatible with sql_mode=only_full_group_by
原因:mysql 5.7+ 版本only_full_group_by SQL 預設開啟
其實就是使用了oracle的group規則啦,導致舊版本寫的sql無法通過
解決方法:
mysql> SHOW SESSION VARIABLES; mysql> SHOW GLOBAL VARIABLES; mysql> select @@sql_mode;
得到sql-mode例如:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
注意:不要複製,個人資料庫配置不同,將所查的sql_mode去除ONLY_FULL_GROUP_BY後重新set
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
ps: 直接設定sql_mode為修改全域性變數,只對新建資料庫有效,已有資料庫需進入後執行上方set程式碼
set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';