【问题标题】: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

【问题讨论】:

    标签: mysql date default


    【解决方案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,他希望将当前日期作为默认值。
          • 尼克,虽然是这样,但对于许多其他有类似情况的人来说,这是一个可行的解决方案
          猜你喜欢
          • 1970-01-01
          • 2012-02-18
          • 2016-09-22
          • 2021-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-17
          相关资源
          最近更新 更多