MYSQL不接受NOW()作为datetime字段的默认值

时间:2014-03-26 15:15:44

标签: mysql database datetime default

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

为datetime字段设置默认值的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

如果您使用的是5.6.5版,则可以在日期时间列

上设置默认值

你可以这样做

  INVOICE_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

答案 1 :(得分:0)

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