对此,可能有一个简单而直接的答案,但我对发生的事情略有困惑。Mysql - 将空值复制到非空表中
我有一列两个基本表的每个具有该表中列的以下性质
CREATE TABLE test (correct_time timestamp NULL DEFAULT NULL)
CREATE TABLE test2 (correct_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP)
我然后插入一个NULL
值插入test
即
INSERT INTO test (correct_time) VALUES (NULL)
现在我尝试和将test
中的所有条目复制到test2
。
INSERT INTO test2 SELECT * FROM test
这产生的结果为test2
,其中现在的值是0000-00-00 00:00:00
。
我的第一个问题就是,test2
默认值是CURRENT_TIMESTAMP
,那么为什么null
值给出的0000-00-00 00:00:00
一个值,而不是最近的时间?
此外,这产生了一个警告,column 'correct_time' cannot be null
。所以如果我们插入一个NULL
值,为什么它被设置为0000-00-00 00:00:00
而不是抛出一个错误。
这可能取决于你在MySQL 设置'explicit_defaults_for_timestamp'系统变量https://dev.mysql.com/doc/refman/5.7/en /服务器系统变量。html#sysvar_explicit_defaults_for_timestamp –
此外,你需要验证你的MySQL是否处于'strict'模式 - 这可能会影响它如何处理'null',因为某些设置会将'null'转换为空字符串,因此' 000-00-00 00:00:00' https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict –
谢谢,这就是我曾经寻找。此变量已启用,但是一旦我禁用它,数据类型时间戳的行为就会发生变化。 –