“日期”的默认值无效

时间:2012-07-20 05:52:24

标签: mysql date default

我想在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

5 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:9)

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

For Detail: Refer dev.mysql.com

答案 2 :(得分:1)

根据MySQL网站:

  

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

所以:

alter table `RMS`.`transactionentry` 

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

应该有效。你的问题是你通过在它周围放置引号来使它成为一个字符串。

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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

@HostListener('document:keypress', ['$event'])
  handleKeyboardEvent(event: KeyboardEvent) { 
    this.key = event.key;

    // inside this you can catch your key code
    // then check is it backspace or delete keycode 
    // if it is then remove data from selector with help of NgControl.
  }

允许null对我有用。