注意:问题是关于日期类型,而不是日期时间或时间戳
如何更改日期数据类型列以默认使用当前日期? 我看了很多关于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()......
答案 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'))
)