mysql5.7 sql_model 問題:ONLY_FULL_GROUP_BY

1、MySQL的sql_modemysql

  • ONLY_FULL_GROUP_BY:對於GROUP BY聚合操做,若是在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,由於列不在GROUP BY從句中sql

  • NO_AUTO_VALUE_ON_ZERO:該值影響自增加列的插入。默認設置下,插入0或NULL表明生成下一個自增加值。若是用戶 但願插入的值爲0,而該列又是自增加的,那麼這個選項就有用了。數據庫

  • STRICT_TRANS_TABLES:在該模式下,若是一個值不能插入到一個事務表中,則中斷當前的操做,對非事務表不作限制ide

  • NO_ZERO_IN_DATE:在嚴格模式下,不容許日期和月份爲零函數

  • NO_ZERO_DATE:設置該值,mysql數據庫不容許插入零日期,插入零日期會拋出錯誤而不是警告。性能

  • ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE過程當中,若是數據被零除,則產生錯誤而非警告。如 果未給出該模式,那麼數據被零除時MySQL返回NULL事務

  • NO_AUTO_CREATE_USER:禁止GRANT建立密碼爲空的用戶開發

  • NO_ENGINE_SUBSTITUTION:若是須要的存儲引擎被禁用或未編譯,那麼拋出錯誤。不設置此值時,用默認的存儲引擎替代,並拋出一個異常文檔

  • PIPES_AS_CONCAT:將"||"視爲字符串的鏈接操做符而非或運算符,這和Oracle數據庫是同樣的,也和字符串的拼接函數Concat相相似字符串

  • ANSI_QUOTES:啓用ANSI_QUOTES後,不能用雙引號來引用字符串,由於它被解釋爲識別符

2、解決辦法

一、修改sql_mode

#修改sql_mode的語法
SET GLOBAL sql_mode = 'modes';
SET SESSION sql_mode = 'modes';
或者 set sql_model='';
#查看sql_mode的語法
select @@GLOBAL.sql_mode;
select @@SESSION.sql_mode;

3、備註

MYSQL5.7對sql_mode的限制,也是爲了更好的查詢性能。因此若是在開發階段,若是要使用mysql5.7版本建議你們閱讀一下5.7的文檔,而後將本身的sql寫的更嚴謹。
相關文章
相關標籤/搜索