【问题标题】:Cannot alter table, getting error 1067 Invalid default value无法更改表,收到错误 1067 默认值无效
【发布时间】:2014-04-16 21:09:25
【问题描述】:

我将 mysql 数据库从在 linux 上运行的 mysql 服务器恢复到在 windows 上运行的服务器。一切似乎都很好,直到我尝试在其中一张桌子上运行 ALTER TABLE。如果我尝试 ALTER 任何东西,我得到的错误是: 错误代码:1067。“creation_date”的默认值无效

现在奇怪的是转储文件成功恢复并创建了表。如果我使用 Workbench 获取我看到的表的创建语句:

`creation_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

对于导致问题的列。

CREATE TABLE 语句如何以我现在无法对其执行更改的方式成功?

【问题讨论】:

标签: mysql datetime default


【解决方案1】:

关于 sql_mode 和 'NO_ZERO_DATE' 的一些背景知识:http://dev.mysql.com/doc/refman/5.1/en/sql-mode.html

您提到您从另一台服务器恢复了表。如果您使用 mysqldump 那么问题的答案是 mysql 在加载转储的 SQL 时关闭了“NO_ZERO_DATE”模式。 Mysqldump(在 5.5 中测试)将此行放在转储 SQL 的顶部:

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

它还会在加载转储时关闭外键检查和其他有用的东西。

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

这解释了为什么您能够恢复牌桌,但在尝试改变时,您必须遵守更严格的规则。如果你真的想覆盖它,你可以在你的 alter table 之前尝试以下操作:

mysql> SET SESSION sql_mode='';

然后修改表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2020-12-01
    • 2014-12-07
    • 2019-02-28
    • 2018-07-06
    • 1970-01-01
    相关资源
    最近更新 更多