mysql “日期”的默认值无效

4nkexdtk  于 2023-04-05  发布在  Mysql
关注(0)|答案(6)|浏览(185)

我想在mysql中设置date作为date的默认值(不是timestamp),但是出现了下面的错误

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
wlp8pajw

wlp8pajw1#

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());
gg0vcinb

gg0vcinb2#

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

dddzy1tm

dddzy1tm3#

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

eaf3rand

eaf3rand4#

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

alter table `RMS`.`transactionentry` 

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

你的问题是你把它变成了一个字符串,把它放在引号里。

lstz6jyr

lstz6jyr5#

可以使用以下命令更改列定义:

ALTER TABLE transactionentry MODIFY COLUMN `Date` date null;

允许null为我工作。

wrrgggsh

wrrgggsh6#

change `Date` `Date` datetime default 'CURRENT_DATE' NOT NULL

对日期列使用DATETIME数据类型而不是DATE。这将包括时间戳信息。

相关问题