我有一个可以为空的时间戳字段(enddate)的表
CREATE TABLE `fee` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(50) NOT NULL DEFAULT 'FIXED',
`name` varchar(100) NOT NULL,
`description` varchar(255) DEFAULT NULL,
`startdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`enddate` datetime NOT NULL DEFAULT '2038-01-18 22:00:00',
PRIMARY KEY (`id`),
) ENGINE=InnoDB;
我运行一个插入,将null传递给startdate和enddate,期望它将使用我的默认值。所以跑步:
INSERT INTO `fee` (`type`, `name`, `description`, `startdate`, `enddate`)
VALUES
('FIXED', 'Delivery fee', NULL, NULL, NULL);
会插入:
27, FIXED, Delivery fee, NULL, NOW(), '2038-01-18 22:00:00'
但它插入:
27, FIXED, Delivery fee, NULL, NOW(), NOW()
我在mysql 5.5,5.6和5.7中尝试了这个,基于他们的documentation:
使用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP特定于TIMESTAMP。 DEFAULT子句也可用于指定常量(非自动)默认值;例如,DEFAULT 0或DEFAULT'2000-01-01 00:00:00'。
问题是,我做错了什么?
答案 0 :(得分:0)
当您为表中的任何字段设置默认值时,您只应在实际想要插入其他内容而不是默认值时传递该值。您使用查询将其设置为null,但是在您的CREATE查询中
FirebaseApp.initializeApp(this);
你已将它设置为'NOT NULL'。