“日期”的默认值无效
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
抛出错误 RangeError:将自定义日期设置为 react-datepicker 的 DatePicker 时时间值无效