mysql 5.7时间戳默认插入null错误



我有下面的create table语句。

CREATE TABLE `test_table` ( 
`id` INT(11) NOT NULL,
`field1` varchar(10),
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);

当我进行以下插入时;列"updated_at"不能为null">

insert into test_table (id, field1, updated_at) values (1234, 'foo', null);

我原以为updated_at在这种情况下会取默认值。

mysql 5.7.12版

然而,当我在mysql 5.6版本中执行此操作时,insert命令可以工作。从5.6到5.7的版本有变化吗?我认为唯一的区别是5.7将NO_ZERO_DATE默认为true。但我以为那只是约会时间。我需要进行配置更改吗?

可以通过不传递updated_at来实现结果,但在这种情况下,我没有overinsert语句。

我怀疑这与SQL严格模式有关,但我在文档中找不到与您的用例匹配的确切引号。

最重要的是,当您为服务器提供显式null值时,不应该期望服务器使用默认值。

如果由于某种原因无法从insert列表中删除该列,则可能的解决方法是使用default关键字,这将使您的意图变得明确:

insert into test_table (id, field1, updated_at) 
values (1234, 'foo', default);

由于启用了explicit_defaults_for_timestamp,因此引发此错误。禁用此功能将解决问题参考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp

最新更新