如何将DATE(不是DATETIME/TIMESTAMP)列的默认值设置为当前日期?

Dmi*_*sev 7 mysql

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

如何更改日期数据类型列以默认使用当前日期?我看了很多关于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;
Run Code Online (Sandbox Code Playgroud)

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

小智 9

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

datecolumn date DEFAULT (CURDATE())
Run Code Online (Sandbox Code Playgroud)

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


100*_*111 6

可能你不能在mysql中为'date'数据类型设置默认值.您需要将类型更改为时间戳或日期时间.

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

"日期"的默认值无效

编辑:

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

CREATE TABLE foo (
    `creation_time`     DATETIME DEFAULT CURRENT_TIMESTAMP,
    `modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP
)
Run Code Online (Sandbox Code Playgroud)

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

  • 他从字面上说日期,而不是日期时间 (7认同)

小智 5

MySQL 8.0+:

CREATE TABLE foo (
    `creation_time`     DATE DEFAULT (DATE_FORMAT(NOW(), '%Y-%m-%d'))
)
Run Code Online (Sandbox Code Playgroud)