一個服務器正在嚴格模式在默認情況下運行,其他沒有。 如果服務器以嚴格模式運行(或者將其設置爲連接),並且嘗試將NULL值插入定義爲NOT NULL的列中,則會發生#1364錯誤。如果沒有嚴格的模式您的NULL值將與空字符串或0
實例來代替:
CREATE TABLE `test_tbl` (
`id` int(11) NOT NULL,
`someint` int(11) NOT NULL,
`sometext` varchar(255) NOT NULL,
`somedate` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
SET sql_mode = '';
INSERT INTO test_tbl(id) VALUES(1);
SELECT * FROM test_tbl;
+----+---------+----------+---------------------+
| id | someint | sometext | somedate |
+----+---------+----------+---------------------+
| 1 | 0 | | 0000-00-00 00:00:00 |
+----+---------+----------+---------------------+
SET sql_mode = 'STRICT_ALL_TABLES';
INSERT INTO test_tbl(id) VALUES(2);
#1364 - Field 'someint' doesn't have a default value
是在CREATE TABLE語句中的每個服務器上的一樣嗎? 'show create table tablename' – sreimer 2011-05-31 21:58:32
是的,它們是一樣的。 – 2011-05-31 22:22:53