在使用CURDATE()作为默认值时,在MySQL中创建表失败。

17 浏览
0 Comments

在使用CURDATE()作为默认值时,在MySQL中创建表失败。

我正在尝试使用phpmyadmin的SQL控制台创建以下表格:

CREATE TABLE dates
(
id int NOT NULL,
id_date datetime NOT NULL DEFAULT CURDATE(),
PRIMARY KEY (id)
)

然而,我遇到以下错误:

alt text

它显示了红色的"CURDATE()",所以我猜那就是问题所在。

有人可以帮助我吗?

0
0 Comments

在MySQL中使用CURDATE()作为默认值是不允许的。相反,可以使用带有DEFAULT CURRENT_TIMESTAMP的TIMESTAMP列。然后需要忽略其中的时间部分。

例如SQL代码如下:

CREATE TABLE dates (
    id int NOT NULL,
    id_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);
INSERT INTO dates (id) VALUES (1);
SELECT id, DATE(id_date) AS id_date FROM dates;

结果如下:

id id_date

1 2010-09-12

我知道这有点晚了,但是是的,w3schools.com的参考是错误的。我个人尝试了很多次,并确认它是错误的。此外,在MySQL文档的dev.mysql.com/doc/refman/5.5/en/create-table.html中也有说明:DEFAULT子句指定列的默认值。除了一个例外外,默认值必须是一个常量;它不能是一个函数或表达式的值。这意味着,例如,不能将日期列的默认值设置为函数NOW()或CURRENT_DATE的值。

有人尝试了类似的东西,下面的代码可以正常工作...很奇怪...我认为这是一个产品错误:

CREATE TABLE employee (
    hire_date timestamp NOT NULL DEFAULT now()
);

0