我有以下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‘不能为空”
insert into test_table (id, field1, updated_at) values (1234, 'foo', null);我原以为在这种情况下,updated_at只会采用默认值。
mysql版本5.7.12
但是,当我在mysql 5.6版中执行此操作时,insert命令可以工作。versoin从5.6到5.7有变化吗?我认为唯一的区别是5.7的NO_ZERO_DATE默认设置为true。但我以为那只是约会时间。是否需要进行配置更改?
可以通过不传入updated_at来实现此结果,但在本例中我没有使用over insert语句。
发布于 2020-07-17 07:38:12
我怀疑这与SQL Strict mode有关-但我在文档中找不到与您的用例匹配的确切引用。
底线是,当您为服务器提供一个显式的null值时,您不应该期望服务器使用默认值。
如果由于某种原因无法从insert列表中删除该列,一种可能的解决方法是使用default关键字,这使您的意图更加明确:
insert into test_table (id, field1, updated_at)
values (1234, 'foo', default);https://stackoverflow.com/questions/62943662
复制相似问题