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

时间:2015-03-02 08:50:15

标签: mysql

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

如何更改日期数据类型列以默认使用当前日期? 我看了很多关于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 个答案:

答案 0 :(得分:5)

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

你可能会看一下这个类似的问题。

Invalid default value for 'Date'

修改

在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

答案 1 :(得分:1)

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

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

SET SQL_MODE='ALLOW_INVALID_DATES';

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

答案 2 :(得分:1)

它似乎在sqlite中起作用:

"date" DATE NOT NULL DEFAULT (DATE(CURRENT_TIMESTAMP))

答案 3 :(得分:0)

MySQL 8.0 +:

CREATE TABLE foo (
    `creation_time`     DATE DEFAULT (DATE_FORMAT(NOW(), '%Y-%m-%d'))
)