mysql - 无法更改表,出现错误 1067 无效的默认值

标签 mysql datetime default

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

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

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

对于导致问题的列。

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

最佳答案

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='';

然后修改表。

关于mysql - 无法更改表,出现错误 1067 无效的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23120188/

相关文章:

mysql - 正确地移动了 WordPress(我认为)但总是出现 500 错误

c# - 如何转换 DateTime[] 日期 = datelist.ToArray();在 C# 中仅显示日期

datetime - 如何计算纪元日?

sql-server - 带值 SQL

php - 管理员只能访问 php

mysql - 'Moto G 3rd Generation' 中的未知列 'field list'

cocoa-touch - 在哪里可以找到 NSDateFormatter 可用的格式字符串模式表?

r - 从外部设置包中函数的默认参数

c# - 如果私有(private)变量已经是私有(private)的,我应该将它们标记为私有(private)的是什么?

MySQL dbCursor 不工作