大家好

前一陣子遇到一個問題
例如 以下有個表

 

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

希望對大家有幫助
感恩!