“添加日期”的默认值无效

Posted

技术标签:

【中文标题】“添加日期”的默认值无效【英文标题】:Invalid default value for 'dateAdded' 【发布时间】:2012-02-18 19:36:54 【问题描述】:

我遇到了一个无法解决的愚蠢的 SQL 问题。

ALTER TABLE `新闻`
 ADD `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT ,
 添加主键(`dateAdded`)

错误:

(#1067)Invalid default value for 'dateAdded'

有人可以帮帮我吗?

【问题讨论】:

这可能是一个愚蠢的问题,但你为什么要AUTO_INCREMENT DATETIME 【参考方案1】:

我通过将DATE 更改为DATETIME 解决了我的问题

【讨论】:

【参考方案2】:

我有同样的问题, 以下修复解决了我的问题。

选择类型为“TIMESTAMP”

不要在长度/值字段中输入任何内容。保持空白

选择 CURRENT_TIMESTAMP 作为默认值。

我正在使用 mysql 5.5.56 版

【讨论】:

【参考方案3】:

将类型从日期时间更改为时间戳,它将起作用! 我对 mysql 5.5.56-MariaDB - MariaDB Server 有同样的问题 希望它可以帮助...对不起,如果贬低

【讨论】:

【参考方案4】:

还要注意,在 MySQL 5.7.x 上将 DATETIME 指定为 DATETIME(3) 或类似时,您还必须为 CURRENT_TIMESTAMP(3) 添加相同的值。如果不是,它将继续抛出“无效的默认值”。

【讨论】:

这解决了我在 5.7.x 上的问题。我的日期时间字段被定义为 datetime(6) 并使用 CURRENT_TIMESTAMP(6) 解决了问题 这是非常值得注意的。【参考方案5】:

mysql version 5.5 设置 datetime 默认值为 CURRENT_TIMESTAMP 会报错 您可以更新到 5.6 版本,它将日期时间默认值设置为 CURRENT_TIMESTAMP

【讨论】:

【参考方案6】:

我的 LEMP 上有 mysql 版本 5.6.27,默认值 CURRENT_TIMESTAMP 可以正常工作。

【讨论】:

【参考方案7】:

CURRENT_TIMESTAMP 是特定于版本的,现在从版本 5.6 开始允许用于 DATETIME 列。

见MySQL docs。

【讨论】:

你确定吗?我在 5.7.x 版本中遇到上述错误【参考方案8】:

CURRENT_TIMESTAMP 仅适用于 TIMESTAMP 字段。 DATETIME 字段必须保留空默认值,或者根本没有默认值 - 默认值必须是常量值,而不是表达式的结果。

相关文档:http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

您可以通过在表上设置插入后触发器以在任何新记录上填充“现在”值来解决此问题。

【讨论】:

从 mysql 5.6.5 开始,您可以将 CURRENT_TIMESTAMP 与 DATETIME 字段一起使用。见dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html 感谢 Frank,在尝试将导出的数据库从最新的 xampp 导入到早期版本时发现了这个问题。 HCD ,Frank ...发现从 MariaDb 10.x 导出到 MariaDB 5.5 的相同问题 ...谢谢 这个错误也发生在 mariadb 5.5 中。升级到 mariadb 10 并解决。谢谢弗兰克

以上是关于“添加日期”的默认值无效的主要内容,如果未能解决你的问题,请参考以下文章

“日期”的默认值无效

联合字段的 Avro 无效默认值

MySQL:TIMESTAMP 的默认值无效

Eloquent:带有时间戳的无效默认值

使用Lombok @Builder注解导致默认值无效

求助,为啥webstorm设置默认缩进值无效