以下是我的SQL查询,它会抛出错误: -
CREATE TABLE IF NOT EXISTS USER_PROFILE(Id INT PRIMARY KEY AUTO_INCREMENT, date DATETIME NOT NULL DEFAULT NOW) ;
它说Invalid default value for 'date'
。
我也尝试了NOW()
的同义词,即CURRENT_TIMESTAMP
,但仍然是同样的错误。
如何使用默认值当前时间创建列日期?
在文档页面上,它表示以这种方式分配
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
dt DATETIME DEFAULT CURRENT_TIMESTAMP
);
答案 0 :(得分:2)
来自文件
数据类型规范中的DEFAULT值子句表示a 列的默认值。除了一个例外,默认值必须 是一个常数;它不能是一个功能或表达。这意味着, 例如,您不能将日期列的默认值设置为 NOW()或CURRENT_DATE等函数的值。例外 是您可以指定CURRENT_TIMESTAMP作为TIMESTAMP的默认值 和DATETIME列
因此默认值中不允许使用任何函数,因此第一个查询失败。
再次来自文件
从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动生成 初始化并更新到当前日期和时间(即, 当前时间戳)。在5.6.5之前,这仅适用于TIMESTAMP,和 每个表最多一个TIMESTAMP列。首先说明如下 描述MySQL 5.6.5及更高版本的自动初始化和更新, 然后是5.6.5之前版本的差异。
Before 5.6.5, this is true only for TIMESTAMP
所以你的mysql版本小于5.6.5
,因此第二个查询也失败了。
因此您需要将表格创建为
CREATE TABLE IF NOT EXISTS
USER_PROFILE
(
Id INT PRIMARY KEY AUTO_INCREMENT,
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ;
答案 1 :(得分:0)
可能是DATE作为保留字,在它到达DEFAULT子句时会使它混淆。尝试使用其他名称,如果可行,请尝试引用“日期”。