在 MySQL-5.1.73 上转储数据库并将其加载到 MySQL-5.5 之后,我注意到,至少有一个表的主键没有auto_increment
传输其标志......describe 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 | |
+-----------+--------------+------+-----+---------+----------------+
但是,在加载到目标后,最后一列是空auto_increment
的——-field 的标志ID
消失了。
事实上,查看转储,我看到表的定义为:
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
)。因此,当您使用它导出时,
--compatible=postgres
它不会包含在转储中。您可以使用 PostgreSQL 兼容性标志停止导出,也可以手动添加该
AUTO_INCREMENT
选项。在任何一种情况下,如果您确实计划将此模式导入 PostgreSQL,则必须修改转储文件以将列类型更改SERIAL
为您想要自动递增的任何列。请注意,尽管有名称,但该
--compatible
选项不会将架构转换为保证在您选择的数据库中工作的形式。该选项所做的只是删除MySQL 独有的内容,以便您可以更轻松地自己完成转换,无论是手动还是使用您构建的某种脚本。
从文档中: