【发布时间】:2017-10-09 09:24:06
【问题描述】:
对此可能有一个简单直接的答案,但我对正在发生的事情感到有些困惑。
我有两个基本表,每列有一列,该表中的列具有以下属性
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 dev.mysql.com/doc/refman/5.7/en/… 中为
explicit_defaults_for_timestamp设置的系统变量 -
此外,您需要验证您是否在
strict模式下拥有MySQL - 这会影响它处理null的方式,因为某些设置会将null转换为空字符串,因此000-00-00 00:00:00dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict -
谢谢,这就是我要找的。此变量已启用,但是一旦我禁用它,数据类型时间戳的行为就会改变。