8

我想将日期设置为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
4

5 回答 5

14
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());
于 2012-07-20T05:56:03.843 回答
10

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

详情:参考 dev.mysql.com

于 2012-07-20T05:56:20.477 回答
1

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

于 2018-01-23T21:20:05.520 回答
0

根据 MySQL 网站:

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

所以:

alter table `RMS`.`transactionentry` 

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

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

于 2012-07-20T05:55:36.133 回答
0

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

ALTER TABLE transactionentry MODIFY COLUMN `Date` date null;

允许 null 为我工作。

于 2018-12-27T03:53:47.103 回答