mysql的sql-mode

問題:1364 - Field 'data' doesn't have a default valuemysql

data字段設置爲非空,默認mysql是不容許插入的sql

show variables like 'sql_mode%' 默認值:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION(對應版本5.6.23)數據庫

方案1:插入語句加入data字段函數

方案2: 修改sql_mode值測試

vi /etc/my.cnf事務

[mysqld]該段落下加入或修改sql-mode值爲開發

sql-mode="NO_ENGINE_SUBSTITUTION"字符串

便可編譯

最後重啓mysql服務變量

 

sql_mode是個很容易被忽視的變量,默認值是空值,在這種設置下是能夠容許一些非法操做的,好比容許一些非法數據的插入。在生產環境必須將這個值設置爲嚴格模式,因此開發、測試環境的數據庫也必需要設置,這樣在開發測試階段就能夠發現問題 
  
sql_mode經常使用值以下: 
ONLY_FULL_GROUP_BY:

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


NO_AUTO_VALUE_ON_ZERO:

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


STRICT_TRANS_TABLES:

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

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後,不能用雙引號來引用字符串,由於它被解釋爲識別符

ORACLE的sql_mode設置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

相關文章
相關標籤/搜索