我已经见过好几次了。我有一台服务器允许我插入一些值,而无需指定其他值,如下所示:INSERT INTO table SET value_a='a', value_b='b';
(value_c 是一个没有设置默认值的字段,但在这里工作正常)。当脚本移动到新服务器时,一些 INSERT 查询会中断,因为它要求查询指定所有非默认值,第一次出现未指定非默认值时会出现以下错误:
#1364 - Field 'value_c' doesn't have a default value
为表设置默认值可能会破坏其他区域的功能,否则我就会这样做。我很想知道这里到底发生了什么。
默认情况下,其中一台服务器在严格模式下运行,而另一台则不运行。
如果服务器在严格模式下运行(或者您在连接中设置它)并且您尝试将 NULL 值插入到定义为 NOT NULL 的列中,您将收到 #1364 错误。如果没有严格模式,您的 NULL 值将被替换为空字符串或 0。
Example:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)