MySQL的sql_mode模式,MySQLsql_mode模式
舉例:
表test
CREATE TABLE `test` (
`a` varchar(255) NOT NULL,
`b` varchar(255) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
`d` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果執行SQL語句insert into test values ('', '', '', '');會報錯:1366 - Incorrect integer value: '' for column 'c' at row 1
查找my.cnf文件,原來MySQL的sql_mode模式設置為sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,而且表的引擎為InnoDB,所以會報以上錯誤。
STRICT_TRANS_TABLES模式:嚴格模式,進行數據的嚴格校驗,只對支持事務的表(InnoDB)啟用嚴格模式,錯誤數據不能插入,報error錯誤。
NO_ENGINE_SUBSTITUTION模式:啟用後,若需要的存儲引擎被禁用或未編譯,則拋出錯誤;未啟用時將用默認的存儲引擎代替,並拋出一個異常。
WampServer集成開發環境的MySQL配置文件my.ini中默認並沒有設置MySQL的sql_mode模式,執行以上語句時並不會報錯,int類型的字段插入空值時會保存為0。
其他sql_mode模式:
STRICT_ALL_TABLES模式:嚴格模式,對所有引擎的表都啟用嚴格模式。在此模式下,一旦任何操作的數據產生問題,都將終止當前的操作,對於啟用STRICT_ALL_TABLES的非事務引擎而言,這時數據可能停留在一個未知的狀態,因此需非常小心這個選項可能帶來的潛在影響。
ANSI模式:寬松模式,對插入數據進行校驗,如果不符合定義類型或長度,對數據類型調整或截斷保存,報warning警告。
TRADITIONAL模式:嚴格模式,當向mysql數據庫插入數據時,進行數據的嚴格校驗,保證錯誤數據不能插入,報error錯誤。用於事物時,會進行事務的回滾。