MYSQL不接受现在(NOW())作为日期时间字段的默认值。

34 浏览
0 Comments

MYSQL不接受现在(NOW())作为日期时间字段的默认值。

这个问题已经有答案了:

如何设置MySQL Datetime列的默认值?

我试图在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) 
);

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

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

0
0 Comments

如果您的版本是5.6.5,那么可以在datetime列上设置默认值。您可以像这样操作:

  INVOICE_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

0