使用 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 中创建表失败的主要内容,如果未能解决你的问题,请参考以下文章

如何使用zend框架2在更改下拉值时在输入字段内显示值

使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败

“致命错误:在 Swift ios 中使用 vImageBuffer_initWithCGImage 时在展开可选值时意外发现 nil”

在主键列(表)中插入重复值时在 SQL Server 中返回哪个错误代码

vue中某个值不存在时,给一个默认值的写法 curDate.username '游客'

尝试在使用Grails作为框架时在H2数据库中查看表