使用MySQL5.6.40
这是表定义:
CREATE TABLE IF NOT EXISTS `updated_tables` (
`table_name` VARCHAR(50) NOT NULL,
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY (`table_name`),
UNIQUE INDEX `table_name_UNIQUE` (`table_name` ASC))
ENGINE = InnoDB;
这是查询(由sequalize生成):
INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL) ON DUPLICATE KEY UPDATE `table_name`=VALUES(`table_name`), `updated_at`=VALUES(`updated_at`);
同一查询的简化形式:
INSERT INTO `updated_tables` (`table_name`,`updated_at`) VALUES ('workdamnit',NULL)
并在表中生成以下条目:
表名称:workdamnit
更新时间:2018-07-05 14:27:17.142494
现在来回答问题。
在aws-rds上使用mysql 5.6.39-log
给出此错误:错误代码:1048。“updated\u at”列不能为空
是因为mysql版本有点不同,还是和rds有关?
3条答案
按热度按时间bfnvny8b1#
你在试着
INSERT NULL
在一个不允许的领域。此外,此字段还有一个默认值。所以你可以试着:3pvhb19x2#
在创建表的过程中,您在列中提到了以下内容:
updated_at
:不允许
NULL
如果没有提供,请使用CURRENT_TIMESTAMP(6)
作为默认值。因此,当您在查询中插入null时,它会给出错误。
所以,如果我明白你现在想做什么,这应该是你的问题:
而不是
希望有帮助
qybjjes13#
经过研究,我找到了答案。rds示例在默认情况下启用了严格模式,因此它的响应正常。而我的本地示例,以及ec2上的一个mysql示例,没有使用严格模式。