1. 程式人生 > >MySql 5.7+ ONLY_FULL_GROUP_BY 引發問題解決方法

MySql 5.7+ ONLY_FULL_GROUP_BY 引發問題解決方法

一般都是使用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';