MYSQL 不接受 NOW() 作为日期时间字段的默认值 [重复]

Posted

技术标签:

【中文标题】MYSQL 不接受 NOW() 作为日期时间字段的默认值 [重复]【英文标题】:MYSQL not accepting NOW() as a default value for a datetime field [duplicate] 【发布时间】: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) 
);

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于MYSQL 不接受 NOW() 作为日期时间字段的默认值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql 年龄计算(根据生日字段)

mysql中时间是dateTime类型的

mysql两个日期计算天数

MYSQL常用日期操作

MYSQL-------日期函数

在mysql中,我用now获得的日期时间,和当前系统的时间不一样。日期一样