表列的auto_increment标志不保存备份?

在MySQL-5.1.73上转储数据库并将其加载到MySQL-5.5之后,我注意到,至less有一个表的主键没有传输auto_increment标志…原始describe tabledescribe table如下所示:

 +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | FIELD_ID | bigint(20) | NO | | 0 | | | ID | bigint(20) | NO | PRI | NULL | auto_increment | | ISSUE_ID | bigint(20) | NO | MUL | 0 | | | LOCK_HASH | varchar(255) | YES | MUL | NULL | | | LOCK_TIME | bigint(20) | YES | | NULL | | | RANK | varchar(255) | NO | MUL | NULL | | | TYPE | int(11) | NO | | 0 | | +-----------+--------------+------+-----+---------+----------------+ 

但是,加载到目标后,最后一列是空的 – ID字段的auto_increment标志消失了。

事实上,看着这个垃圾场,我看到了桌子的定义:

 CREATE TABLE "AO_60DB71_LEXORANK" ( "FIELD_ID" bigint(20) NOT NULL DEFAULT '0', "ID" bigint(20) NOT NULL, "ISSUE_ID" bigint(20) NOT NULL DEFAULT '0', "LOCK_HASH" varchar(255) COLLATE utf8_bin DEFAULT NULL, "LOCK_TIME" bigint(20) DEFAULT NULL, "RANK" varchar(255) COLLATE utf8_bin NOT NULL, "TYPE" int(11) NOT NULL DEFAULT '0', PRIMARY KEY ("ID"), KEY "index_ao_60db71_lexorank_rank" ("RANK"), KEY "index_ao_60db71_lex604083109" ("ISSUE_ID"), KEY "index_ao_60db71_lex1632828616" ("LOCK_HASH") ); 

没有明显的指令来设置ID自动递增…与mysqldump使用的非默认标志是:

 extended-insert=false compatible=postgres single-transaction 

这是一个已知的问题吗? 我应该尝试使用MySQL(Oracle)的错误报告吗?

AUTO_INCREMENT是MySQL唯一的选项(其他数据库软件使用不同的命令 – 例如,PostgreSQL使用称为SERIAL的特殊列types)。

因此,使用--compatible=postgres导出时,它不会包含在转储中。

您可以使用PostgreSQL兼容性标志停止导出,也可以手动添加AUTO_INCREMENT选项。 无论哪种情况,如果您实际上计划将此架构导入到PostgreSQL中,则必须修改转储文件以将列types更改为SERIAL ,以便自动增加任何列。


请注意,尽pipe有名称,但--compatible选项不会将模式转换为可保证在您select的数据库中工作的forms。

该选项所做的一切就是删除 MySQL独有的东西,以便您可以更轻松地自行完成转换,无论是通过手动还是使用您已构build的某种脚本。

从文档 :

该选项不保证与其他服务器的兼容性。 它仅启用当前可用于使转储输出更兼容的SQL模式值。 例如,– --compatible=oracle不会将数据types映射到Oracletypes或使用Oracle注释语法。