X
首页 数据库相关工具 通过 IBM Migration Toolkit 支持把数据从 MySQL 迁移到 Informix Dynamic Server
通过 IBM Migration Toolkit 支持把数据从 MySQL 迁移到 Informix Dynamic Server
IBM® Migration Toolkit 增加了一些帮助把数据从 MySQL 迁移到  Informix® Dynamic Server 的新功能。在本文中,学习如何使用这个工具集帮助迁移 DDL 和 DML 语句,了解如何映射数据类型。

MySQL 迁移支持

在 2007 年初,IBM Migration Toolkit 2.0.2.0(MTK)实现了对从 MySQL 4.x 和 5.x 迁移到 Informix Dynamic Server(IDS)目标的有限支持。后续的 MTK 版本改进了最初的支持。改进的支持包括迁移某些 DDL 和 DML 语句。

MTK 支持对以下 MySQL SQL 语句的完全转换:

  • CREATE TABLE 语句
  • CREATE INDEX 语句

MTK 还在很大程度上支持以下 MySQL SQL 语句:

  • INSERT 语句
  • ALTER TABLE 语句
  • DROP TABLE 语句
  • SELECT 语句
  • DELETE 语句
  • UPDATE 语句

从 MySQL 到 IDS 的迁移支持只适用于 Informix Dynamic Server Version 7、9.4、10 或更高版本。

MTK 支持以下 MySQL SQL 语句的完全转换:

CREATE TABLE 语句
CREATE INDEX 语句
MTK 还在很大程度上支持以下 MySQL SQL 语句:

INSERT 语句
ALTER TABLE 语句
DROP TABLE 语句
SELECT 语句
DELETE 语句
UPDATE 语句


CREATE TABLE 语句

对 create table 语句的支持与对 DB2 的支持相似。惟一的差异是映射到的 IDS 数据类型和 IDS 等效语法。本文讲解 MySQL 语法到 DB2 等效语法的 MTK 转换。

表 2 解释了 MySQL 数据类型如何映射到 IDS 数据类型。还指出了特定数据类型的可选映射。


表 2. 数据类型映射

MySQL 数据类型IDS 数据类型
TINYINTSMALLINT
SMALLINTSMALLINT
MEDIUMINTINTEGER
INTINTEGER
INTEGERINTEGER
BIGINTINT8
REALDOUBLE PRECISION
DOUBLEDOUBLE PRECISION
FLOATDOUBLE PRECISION
DECIMAL(p,s)

其中:
s > 0 && p >= s
s > 0 && p < s
s < 0



DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32),0)
NUMERIC(p,s)

其中:
s > 0 && p >= s
s > 0 && p < s
s < 0



DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32), min(s,32))
DECIMAL(min(p,32),0)
TINYINT UNSIGNEDSMALLINT
SMALLINT UNSIGNEDINTEGER

可选: SMALLINT
MEDIUMINT UNSIGNEDINTEGER
INT UNSIGNEDINT8

可选: INTEGER
BIGINT UNSIGNEDDECIMAL(20,0)

可选: INT8
REAL UNSIGNEDDOUBLE PRECISION
DOUBLE UNSIGNEDDECIMAL(p,s)

可选: DOUBLE PRECESION
FLOAT UNSIGNEDDOUBLE PRECISION
DECIMAL UNSIGNEDDECIMAL(p,s)
NUMERIC UNSIGNEDDECIMAL(p,s)
DATEDATE
TIMEDATETIME HOUR TO FRACTION
TIMESTAMPDATETIME YEAR TO FRACTION
DATETIMEDATETIME YEAR TO FRACTION

可选: DATE
YEARCHAR(4)
CHAR(l)CHAR(l)
VARCHAR(l)VARCHAR(l)

可选: LVARCHAR
可选: CLOB
TINYBLOBBYTE

可选: BLOB
BLOBBLOB

可选: BYTE
MEDIUMBLOBBYTE

可选: BLOB
LONGBLOBBYTE

可选: BLOB
TINYTEXTTEXT
TEXTTEXT
MEDIUMTEXTTEXT
LONGTEXTTEXT

清单 7 说明 MySQL 数据类型和 CREATE TABLE 语句如何转换为 IDS 语法:


清单 7a. MySQL SQL - CREATE TABLE
               
CREATE TABLE tab7(
col1 CHAR(20),
col2 VARCHAR(30),
col3 SMALLINT(20),
col4 TINYINT(30),
col5 MEDIUMINT(20),
col6 INT(10),
col7 INTEGER(20),
col8 BIGINT(20),
col9 REAL,
col10 DOUBLE,
col11 FLOAT,
col12 DECIMAL(10,4),
col13 NUMERIC(10,4),
col14 DATE,
col15 TIME,
col16 TIMESTAMP,
col17 DATETIME,
col18 YEAR,
col19 BIT
);
 


清单 7b. MTK 转换 - CREATE TABLE(IDS)
               

CREATE TABLE tab7(
col1 CHAR(20),
col2 VARCHAR(30),
col3 SMALLINT,
col4 SMALLINT,
col5 INTEGER,
col6 INTEGER,
col7 INTEGER,
col8 INT8,
col9 DOUBLE PRECISION,
col10 DOUBLE PRECISION,
col11 DOUBLE PRECISION,
col12 DECIMAL(10,4),
col13 DECIMAL(10,4),
col14 DATE,
col15 DATETIME HOUR TO FRACTION (5),
col16 DATETIME YEAR TO FRACTION (5),
col17 DATETIME YEAR TO FRACTION (5),
col18 CHAR(4),
col19 SMALLINT
);
 

 

清单 8 是一个把约束转换为 IDS 语法的示例。


清单 8a. MySQL SQL - 约束
               
CREATE TABLE tab8 (
col1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
col2 SMALLINT
);

CREATE TABLE unq(
c1 INTEGER,
c2 CHAR(10),
CONSTRAINT ccc UNIQUE KEY(c1)
);
 


清单 8b. MTK 转换 - IDS 中的约束
               
CREATE TABLE tab8(
col1 DATETIME YEAR TO FRACTION (5)
 DEFAULT CURRENT YEAR TO FRACTION (5),
col2 SMALLINT
);

CREATE TABLE unq(
c1 INTEGER,
c2 CHAR(10),
UNIQUE(c1) CONSTRAINT ccc
);
 

 

CREATE INDEX 语句

清单 9 给出 CREATE INDEX 语句支持和 MTK 转换的示例。


清单 9a. MySQL SQL - 创建惟一索引
               
CREATE TABLE tab9 (
col1 INT,
col2 FLOAT
);

CREATE UNIQUE INDEX idx1 ON tab9(col1 ASC);
 


清单 9b. MTK 转换 - 创建惟一索引
               
CREATE TABLE tab9(
col1 INTEGER,
col2 DOUBLE PRECISION
);

CREATE UNIQUE INDEX idx1 ON tab9(col1 ASC);
 

 

INSERT 语句

IDS 不支持带多个 VALUE 子句的 INSERT 语句。因此,如果选择 IDS 作为目标,MTK 不会转换 MySQL 中的这些语句。目前,这个 MySQL INSERT 语句需要手工转换。

在下面的示例中,MTK 会生成一个警告并忽略 SQL INSERT 语句。


清单 10a. MySQL SQL - 带多个 VALUE 子句的 INSERT
               
CREATE TABLE tab10(
c1 INT,
c2 CHAR(1)
);

INSERT INTO tab1 VALUES (1,'A'),(2,'B'),(3,'C');
 


清单 10b. MTK 转换 - 带多个 VALUE 子句的 INSERT
               
CREATE TABLE tab10(
c1 INTEGER,
c2 CHAR(1)
);

--* [600292]"insert.sql"(2:2)-(2:49)Ignored the multiple INSERT
statement because Informix Dynamic Server does not support it.
 

 

注意:前面在讨论 DB2 迁移时提到的其他 INSERT 语法在 IDS 迁移期间也是支持的。


结束语

通过使用 MTK 2.0.2.0 和后续 MTK 版本中的改进,我们现在可以转换许多 MySQL DDL 和 DML 语句。MTK 2.0.2.0 和后续 MTK 版本使 MySQL 数据库迁移更加轻松、灵活和强大。更多信息和示例参见 MTK 文档。