“日期”的默认值无效

Posted

技术标签:

【中文标题】“日期”的默认值无效【英文标题】:Invalid default value for 'Date' 【发布时间】:2012-07-20 05:52:23 【问题描述】:

我想将日期设置为mysql中日期的默认值(不是时间戳),但出现以下错误

ALTER TABLE `RMS`.`transactionentry` 
CHANGE `Date` `Date` DATE DEFAULT NOW() NOT NULL

错误

Invalid default value for 'Date'

同样的情况

alter table `RMS`.`transactionentry` 
change `Date` `Date` date default 'CURRENT_DATE' NOT NULL

【问题讨论】:

【参考方案1】:
alter table `RMS`.`transactionentry`
change `Date` `Date` date default current_timestamp NOT NULL

更新:

我不认为你可以用 mysql date 来实现。您必须使用timestamp 或尝试这种方法..

CREATE TRIGGER transactionentry_OnInsert BEFORE INSERT ON `RMS`.`transactionentry`
    FOR EACH ROW SET NEW.dateColumn = IFNULL(NEW.dateColumn, NOW());

【讨论】:

【参考方案2】:

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

For Detail: Refer dev.mysql.com

【讨论】:

【参考方案3】:

请记住,这可能是 MYSQL 版本本身的问题 5.6 允许没有默认值的时间戳,并且不需要将它们设置为 null 但是 5.7 要求您显式设置默认值,如果不是则为 nul

【讨论】:

【参考方案4】:

根据 MySQL 网站:

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

所以:

alter table `RMS`.`transactionentry` 

change `Date` `Date` date default CURRENT_TIMESTAMP NOT NULL

应该可以。你的问题是你通过在它周围加上引号来使它成为一个字符串。

【讨论】:

我从 MySQL IDE 复制了上述语句,但根据您的建议,我删除了引号及其相同的错误,表示无法正常工作。 ERROR 1067 (42000): Invalid default value for 'Date' 。 columne 类型是DATE,而不是TIMESTAMP,因此这样的默认值不起作用。【参考方案5】:

您可以使用以下方法更改列定义:

ALTER TABLE transactionentry MODIFY COLUMN `Date` date null;

允许 null 对我有用。

【讨论】:

OP 不想将该列设置为 NULL,他希望将当前日期作为默认值。 尼克,虽然是这样,但对于许多其他有类似情况的人来说,这是一个可行的解决方案

以上是关于“日期”的默认值无效的主要内容,如果未能解决你的问题,请参考以下文章

默认日期雪花:无效标识符“日期”

MYSQL 不接受 NOW() 作为日期时间字段的默认值 [重复]

ACCEss表中要设置默认值:DATE()结果是例:2011-8-29,我想要带时间的,例2011-8-29 5:45:12

js配置下拉框默认值无效

抛出错误 RangeError:将自定义日期设置为 react-datepicker 的 DatePicker 时时间值无效

联合字段的 Avro 无效默认值