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寫的更嚴謹。