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() 作为日期时间字段的默认值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章