【问题标题】:Create table fail in mysql when using CURDATE() as default使用 CURDATE() 作为默认值时在 mysql 中创建表失败
【发布时间】:2011-04-11 10:32:56
【问题描述】:

我正在尝试使用 phpmyadmin sql 控制台创建下表:

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

但是我收到以下错误:

它以红色显示“CURDATE()”,所以我想这就是问题所在。

有人可以帮我吗?

【问题讨论】:

  • id_date 应该是 date 还是 datetime?您命名和使用它的方式更像是date,但它被声明为datetime
  • 我认为如果它是一个日期时间,那么正确的函数应该是 NOW() 对吧?我仍然认为它不适用于 NOW() 并保持 DATETIME
  • NOW() 也不起作用。见stackoverflow.com/questions/168736/…

标签: mysql phpmyadmin


【解决方案1】:

您不能使用 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

【讨论】:

  • 你能给我看一些SQL代码作为例子吗?非常感谢,因为我的 SQL 经验非常有限。
  • 我知道这已经晚了,但是,是的 w3schools.com 参考是不正确的。我个人试过很多次,确认是假的。同样来自dev.mysql.com/doc/refman/5.5/en/create-table.html 的 MySQL 文档:DEFAULT 子句指定列的默认值。除了一个例外,默认值必须是一个常量;它不能是函数或表达式。这意味着,例如,您不能将日期列的默认值设置为 NOW() 或 CURRENT_DATE 等函数的值。
  • 正在尝试类似的东西,以下工作..奇怪..我认为它是一个产品错误 CREATE TABLE 员工(hire_date timestamp NOT NULL DEFAULT now());
猜你喜欢
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多