大家好
前一陣子遇到一個問題
例如 以下有個表
CREATE TABLE IF NOT EXISTS `gg02` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `case` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
然後當我使用
SHOW VARIABLES LIKE 'sql_mode';
得到參數是 '' (空值)
然後再使用
INSERT INTO `test`.`gg02` (`id`, `name`) VALUES (NULL, 'cccc');
可以正常運作
但是重點來了
如果我的mysql目前的sql_mode設定
有STRICT_TRANS_TABLES
的情況
則會發生
#1364 - Field 'case' doesn't have a default value
這樣的錯誤
為什麼呢?
主要就是
http://dev.mysql.com/doc/refman/5.5/en/sql-mode.html
裡面寫的
Strict SQL Mode
Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons
嚴格模式控制的MySQL處理的數據,如INSERT或UPDATE無效或遺漏值則都會報錯
所以囉
如果在寫入時發生這錯誤
解決方案
1.修改mysql設定,拿掉sql_mode的STRICT_TRANS_TABLES
使用
set global sql_mode = ""
但是要注意是否有權限
2.修正問題的query
希望對大家有幫助
感恩!
留言板
歡迎留下建議與分享!希望一起交流!感恩!