MySQL DATE 字段默认为 CURDATE()。不是日期时间

问题描述 投票:0回答:3

可以将 MySQL 5.7 中的 DATE(NOT DATETIME)列的默认值设置为当前日期吗?
我尝试这个(由工作台生成):

ALTER TABLE `db`.`table` CHANGE COLUMN `column` `column` DATE NOT NULL DEFAULT CURDATE() ;

但对我不起作用。 (表中无数据)

mysql date default
3个回答
13
投票

不,你不能。 文档对此非常清楚:

这意味着,例如,您无法设置日期的默认值 列是函数的值,例如 NOW() 或 CURRENT_DATE。 例外情况是您可以指定 CURRENT_TIMESTAMP 作为默认值 对于 TIMESTAMP 和 DATETIME 列。请参见第 12.3.5 节“自动 TIMESTAMP 和 DATETIME 的初始化和更新”。

您可以执行以下操作之一:

  • 设置具有
    DATETIME
    默认值的列。 创建将日期提取为单独列的视图。
  • 创建一个
    insert
    触发器来设置
    date
    列。

0
投票

如果您有另一列包含默认值为 NOW() 的日期时间字段,则可以通过一种方法来执行此操作。 看这篇文章:


0
投票

我使用

BEFORE INSERT
触发器解决了这个问题:

CREATE TRIGGER `my_schema`.`my_table_BEFORE_INSERT` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
    IF NEW.date IS NULL THEN
        SET NEW.date = CURDATE();
    END IF;
END
© www.soinside.com 2019 - 2024. All rights reserved.