在 MySQL 5.5 中不能将日期默认为 CURRENT_TIMESTAMP

urf*_*ion 24 timestamp default-value mysql-5.5 date

我无法设置Current_timestamp为默认值。我的Mysql版本是5.5.47.

查询是

ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

虽然它在我的本地数据库上使用mysql V5.6.56.

Phi*_*lᵀᴹ 29

MySQL 5.5 手册

您不能将日期列的默认值设置为 NOW() 或 CURRENT_DATE 等函数的值。例外是您可以将 CURRENT_TIMESTAMP 指定为 TIMESTAMP 列的默认值。

因此,如果您添加TIMESTAMP列而不是DATE列,您想要实现的将在 MySQL 5.5 中工作。

此处记录了 5.6.x 中允许该功能的更改,为了完整性,我将引用相关摘要:

从 MySQL 5.6.5 开始,TIMESTAMP 和 DATETIME 列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在 5.6.5 之前,这仅适用于 TIMESTAMP,并且每个表最多有一个 TIMESTAMP 列。


jyn*_*nus 12

检查这个答案

您的选择是:

  • 升级到 MySQL 5.6.5
  • 将列类型更改为 TIMESTAMP,如下所示:

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建一个自动更新列的触发器:

    ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
                                                      -- NULLs or default
                                                      -- to a special value
    DROP TRIGGER IF EXISTS downloads_BI;
    DELIMITER //
    CREATE TRIGGER downloads_BI
    BEFORE INSERT ON downloads FOR EACH ROW
    BEGIN
        IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
            SET NEW.date = now();
        END IF;
    END//
    DELIMITER ;
    
    Run Code Online (Sandbox Code Playgroud)

    如果必须在更新时自动更新或想要防止空值,您可能还想创建一个更新值。

    mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT * FROM downloads;
    +------+---------------------+
    | i    | date                |
    +------+---------------------+
    |    1 | 2016-03-22 09:27:52 |
    +------+---------------------+
    1 row in set (0.00 sec)
    
    Run Code Online (Sandbox Code Playgroud)