关于数据库:MYSQL不接受NOW()作为datetime字段的默认值

MYSQL not accepting NOW() as a default value for a datetime field

本问题已经有最佳答案,请猛点这里访问。

我试图在mysql中将datetime字段的默认值设置为NOW(),但mysql错误表示它无效?

1
2
3
4
5
6
7
8
9
10
11
12
/* 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)
);

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


如果您的版本是5.6.5,那么可以在日期时间列上设置默认值。

你可以那样做


可以使用BEFORE INSERT触发器将值赋给列,包括将当前日期和时间赋给日期时间列。

1
2
3
4
5
6
7
8
9
10
11
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,请注意"自动"初始化和更新行为。初始化列,而不在更改行时更新列…