【问题标题】:Importing SQL database Invalid default value for datetime导入 SQL 数据库 日期时间的默认值无效
【发布时间】:2016-06-23 22:15:34
【问题描述】:

我正在将一个数据库从一台 MySQL 服务器移动到另一台,但是在导入一个表时,我最终遇到了错误:

1067 - 'date' 的默认值无效

表 SQL:

CREATE TABLE IF NOT EXISTS `log` (
  `id` int(11) NOT NULL,
  `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `url` text NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=165 DEFAULT CHARSET=utf8

从 5.6.21 导入 MySQL 版本 5.5.47

【问题讨论】:

  • 您要导入哪个版本的 MySQL?
  • 向我们展示大约 10 行的导入文件。您可能还想在 id 上添加唯一键,例如 (CREATE TABLE log (id int(11) NOT NULL, date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, url text NOT NULL, PRIMARY KEY (id ) ) 引擎=InnoDB 默认字符集=utf8;)。否则,插入空白和空值对我有用。

标签: mysql datetime


【解决方案1】:

在 MySQL 5.5 中,当列数据类型为 TIMESTAMP 而不是 DATETIME 时,您只能使用 DEFAULT CURRENT_TIMESTAMP

MySQL 5.5 documentation 说:

例外情况是您可以将CURRENT_TIMESTAMP 指定为TIMESTAMP 列的默认值。

在 5.6 中,他们将其扩展到 DATETIME,其 documentation 表示:

例外情况是您可以将CURRENT_TIMESTAMP 指定为TIMESTAMPDATETIME 列的默认值。

所以要么更改数据类型,要么删除默认值。

您应该始终警惕迁移到任何软件的旧版本,因为您的代码通常可能正在使用以前不存在的新功能。更新版本通常提供向后兼容性(至少对于少数版本),但旧版本无法处理新版本中未实现的功能。

【讨论】:

    【解决方案2】:

    CURRENT_TIMESTAMP 仅适用于 TIMESTAMP 字段。 DATETIME 字段必须保留空默认值,或者根本没有默认值。

    【讨论】:

    • 您是否阅读了您链接的页面?它说您可以将 CURRENT_TIMESTAMP 指定为 TIMESTAMP 和 DATETIME 列的默认值
    • @Barmar 用于 MySQL 5.7,答案仍然是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多