IBM Migration Toolkit (MTK) 2.0.2.0 起支援從 MySQL 4.x/5.x 遷移至 DB2 及 Informix Dynamic Server (IDS),後續版本持續增強 DDL/DML 轉換能力。本文詳細說明支援範圍、類型映射、語法轉換範例與限制。
| 支援程度 | 語句 |
|---|---|
| 完全轉換 | CREATE TABLE、CREATE INDEX |
| 大幅支援 | INSERT、ALTER TABLE、DROP TABLE、SELECT、DELETE、UPDATE |
| MySQL | DB2 | 備註 |
|---|---|---|
| TINYINT / SMALLINT / MEDIUMINT | SMALLINT / INTEGER | |
| INT / INTEGER | INTEGER | |
| BIGINT | BIGINT | |
| REAL / DOUBLE / FLOAT | DOUBLE | |
| DECIMAL(p,s) / NUMERIC(p,s) | DECIMAL(min(p,31), min(s,31)) | 精度上限 31 |
| UNSIGNED 整數類型 | 對應較大有符號類型 | 可選映射較小類型 |
| DATE / TIME / TIMESTAMP / DATETIME | DATE / TIME / TIMESTAMP | DATETIME→TIMESTAMP |
| YEAR | CHAR(4) | |
| CHAR / VARCHAR | CHAR / VARCHAR | 長文本可選 CLOB |
| BLOB / TEXT 系列 | BLOB / CLOB | 依長度對應 |
AUTO_INCREMENT → GENERATED BY DEFAULT AS IDENTITY
-- MySQL
CREATE TABLE t (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
-- MTK 轉換
CREATE TABLE t (id INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY);
KEY → 獨立 CREATE INDEX
-- MySQL
CREATE TABLE t (id INT AUTO_INCREMENT, name CHAR(20), KEY(name));
-- MTK 轉換
CREATE TABLE t (id INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL, name CHAR(20));
CREATE INDEX MySQLidx ON t(name);
PRIMARY KEY / UNIQUE / FOREIGN KEY 一對一映射轉換。
支援 VALUES 子句單行/多行插入;INSERT ... SELECT 不支援。
MTK 數據遷移工具使用 DB2 LOAD 或 IMPORT 傳輸數據。
| MySQL | IDS | 備註 |
|---|---|---|
| BIGINT | INT8 | |
| REAL / DOUBLE / FLOAT | DOUBLE PRECISION | |
| DECIMAL/NUMERIC | DECIMAL(min(p,32), min(s,32)) | 精度上限 32 |
| TIME / TIMESTAMP / DATETIME | DATETIME HOUR TO FRACTION / YEAR TO FRACTION | 精度預設 5 |
| YEAR | CHAR(4) | |
| VARCHAR | VARCHAR / LVARCHAR / CLOB | 可選映射 |
| BLOB / TEXT | BYTE / TEXT / BLOB | 可選映射 |
IDS 不支援多 VALUES 子句的 INSERT,MTK 會產生警告並忽略該語句,需手工轉換:
-- MySQL
INSERT INTO t VALUES (1,'A'),(2,'B'),(3,'C');
-- MTK 輸出
--* [600292] Ignored the multiple INSERT statement because IDS does not support it.
ALTER TABLE、DROP TABLE、SELECT、DELETE、UPDATE 大幅支援,轉換邏輯與 DB2 目標類似,僅語法與類型映射不同。
MTK 2.0.2.0+ 顯著增強 MySQL 遷移能力,涵蓋核心 DDL 與常用 DML,讓異構資料庫遷移更輕鬆、靈活、強大。