使用默认值当前日期时间 MYSQL 创建列'Date'



以下是我的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
);

来自文档

数据类型规范中的 DEFAULT 值子句指示 列的默认值。除了一个例外,默认值必须 是一个常数;它不能是函数或表达式。这意味着, 例如,不能将日期列的默认值设置为 函数的值,例如 NOW() 或 CURRENT_DATE。例外 是您可以将CURRENT_TIMESTAMP指定为 TIMESTAMP 的默认值 和日期时间列

因此

,默认值中不允许任何函数,因此第一个查询失败。

再次来自文档

从MySQL 5.6.5开始,时间戳和日期时间列可以自动 已初始化并更新为当前日期和时间(即 当前时间戳)。在 5.6.5 之前,这仅适用于 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
) ;
可能是

DATE 作为一个保留字,在到达 DEFAULT 子句时会混淆它。 尝试使用其他名称,如果可行,请尝试引用"日期"。

最新更新