14

注意:问题是关于日期类型,而不是日期时间或时间戳

如何更改日期数据类型的列以默认使用当前日期?我看到了很多datetime(有时间部分)的例子,但不是日期的例子。我努力了:

ALTER TABLE `accounting` ALTER `accounting_date` 
  SET DEFAULT CURRENT_DATE;
ALTER TABLE `accounting` CHANGE `accounting_date` 
  `accounting_date` DATE NOT NULL DEFAULT CURRENT_DATE;

我也尝试过CURDATE(), NOW(), CURRENT_DATE()...

4

5 回答 5

4

可能您无法在 mysql 中为“日期”数据类型设置默认值。您需要将类型更改为时间戳或日期时间。

你可以看看这个类似的问题。

“日期”的默认值无效

编辑:

在 5.6.5 版本中,可以在 datetime 列上设置默认值,甚至可以创建在行更新时将更新的列。类型定义:

CREATE TABLE foo (
    `creation_time`     DATETIME DEFAULT CURRENT_TIMESTAMP,
    `modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP
)

参考: http: //optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html

于 2015-03-02T09:37:22.653 回答
3

MySQL 8.0+:

CREATE TABLE foo (
    `creation_time`     DATE DEFAULT (DATE_FORMAT(NOW(), '%Y-%m-%d'))
)
于 2020-06-10T16:09:45.987 回答
2

它似乎在 sqlite 中工作:

"date" DATE NOT NULL DEFAULT (DATE(CURRENT_TIMESTAMP))
于 2020-08-06T15:03:25.813 回答
1

正如这个问题Invalid default value for 'create_date' timestamp field 中所述,当 MySQL 处于strict模式时可能会发生此错误(我相信这是默认行为)。

如果要覆盖它,只需在创建表时禁用所有这些检查:

SET SQL_MODE='ALLOW_INVALID_DATES';

仍然会生成警告,但是它将允许创建表。

于 2018-12-16T10:40:06.293 回答
1

我使用的是 8.0.26 版本,这是有效的:

datecolumn date DEFAULT (CURDATE())

如果你不使用括号,它不起作用!

于 2021-10-16T14:05:38.473 回答