我将 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/