无法在MySQL 5.5中将日期默认为CURRENT_TIMESTAMP


18

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

查询为

ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;

在此处输入图片说明

虽然它可以在我的本地数据库上正常工作mysql V5.6.56


问题是由于在mysql新版本的默认值中添加了微秒。有关解决方案,请参见tekina.info/…
艾尼克特·辛格

Answers:


25

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列。


8

检查此答案

您的选择是:

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

    ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
  • 创建一个TRIGGER TRIGGER,它会自动更新该列:

    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 ;
    

    如果必须在更新时自动对其进行更新,或者想要防止使用空值,则可能还需要创建一个更新值。

    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)
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.