【问题标题】:MYSQL not accepting NOW() as a default value for a datetime field [duplicate]MYSQL 不接受 NOW() 作为日期时间字段的默认值 [重复]
【发布时间】:2014-05-05 02:42:44
【问题描述】:

我试图在 MySQL 中将日期时间字段的默认值设置为 NOW(),但 MySQL 错误说它无效?

/* create the invoice table */
CREATE TABLE IF NOT EXISTS INVOICE
(
    LINE_ID INT(9) NOT NULL AUTO_INCREMENT,
    INVOICE_ID INT(9) NOT NULL,
    QUANTITY INT(9) NOT NULL DEFAULT '1',
    INVOICE_DATE DATETIME NOT NULL DEFAULT NOW(),
    TO_DELIVER BOOLEAN NOT NULL DEFAULT 0,
    CUSTOMER_ID INT(9) NOT NULL,
    PRODUCT_ID INT(9) NOT NULL,
    PRIMARY KEY (LINE_ID, INVOICE_ID) 
);

为日期时间字段设置默认值的正确方法是什么?

【问题讨论】:

    标签: mysql database datetime default


    【解决方案1】:

    如果您的版本为 5.6.5,则可以在日期时间列上设置默认值

    你可以这样做

      INVOICE_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
    

    【讨论】:

      【解决方案2】:

      BEFORE INSERT 触发器可用于为列分配值,包括将当前日期和时间分配给 DATETIME 列。

      DELIMITER $$
      CREATE TRIGGER invoice_bi 
      BEFORE INSERT ON invoice
      FOR EACH ROW
      BEGIN
         IF NEW.invoice_date IS NULL THEN
            NEW.invoice_date = NOW();
         END IF;
      END;
      $$
      DELIMITER ;
      

      在 MySQL 5.6.x 之前,唯一可以分配给 DATETIME 列的默认值是文字。只能为 TIMESTAMP 列分配当前日期和时间的默认值。如果您将列更改为TIMESTAMP,请注意“自动”初始化和更新行为。初始化列并且在行更改时不更新它...

      invoice_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
      

      【讨论】:

        猜你喜欢
        • 2020-10-11
        • 2017-02-10
        • 2020-05-16
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        相关资源
        最近更新 更多