如何为timestamp列设置默认常量值?

时间:2016-11-09 16:26:39

标签: mysql database

我有一个可以为空的时间戳字段(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'。

问题是,我做错了什么?

1 个答案:

答案 0 :(得分:0)

当您为表中的任何字段设置默认值时,您只应在实际想要插入其他内容而不是默认值时传递该值。您使用查询将其设置为null,但是在您的CREATE查询中

FirebaseApp.initializeApp(this);

你已将它设置为'NOT NULL'。