使用 CURDATE() 作为默认值时在 mysql 中创建表失败
Posted
技术标签:
【中文标题】使用 CURDATE() 作为默认值时在 mysql 中创建表失败【英文标题】:Create table fail in mysql when using CURDATE() as default 【发布时间】: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() 也不起作用。见***.com/questions/168736/…
【参考方案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());以上是关于使用 CURDATE() 作为默认值时在 mysql 中创建表失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败
“致命错误:在 Swift ios 中使用 vImageBuffer_initWithCGImage 时在展开可选值时意外发现 nil”
在主键列(表)中插入重复值时在 SQL Server 中返回哪个错误代码