由于异构数据库之间支持的数据类型不一样,数据类型无法一一对应,所以DTS在进行结构迁移时,会根据目标库支持的数据类型进行映射。本文为您列出详细数据类型映射关系,便于您查阅和评估数据迁移对业务的影响。
相关数据迁移的配置案例,请参见DTS数据迁移方案概览。
从自建TiDB迁移至自建MySQL、RDS MySQL或PolarDB MySQL
TiDB数据类型 | MySQL数据类型 |
---|---|
BIGINT | BIGINT |
BINARY | BINARY |
BIT | BIT |
BOOL\ BOOLEAN | TINYINT |
CHAR | CHAR |
DATE | DATE |
DATETIME | DATETIME |
DECIMAL | DECIMAL |
DOUBLE | DOUBLE |
ENUM | ENUM |
FLOAT | FLOAT |
INT | INT |
INTEGER | INTEGER |
JSON | JSON |
MEDIUMBLOB/LONGBLOB TINYBLOB/BLOB/ |
MEDIUMBLOB/LONGBLOB TINYBLOB/BLOB/ |
MEDIUMINT | MEDIUMINT |
SET | SET |
SMALLINT | SMALLINT |
TEXT/LONGTEXT | TEXT/LONGTEXT |
TIME | TIME |
TIMESTAMP | TIMESTAMP |
TINYINT | TINYINT |
VARBINARY | VARBINARY |
VARCHAR | VARCHAR |
YEAR | YEAR |
从自建Oracle迁移至自建MySQL、RDS MySQL或PolarDB MySQL
Oracle数据类型 | MySQL数据类型 |
---|---|
varchar2(n [char/byte]) | varchar(n) |
nvarchar2[(n)] | national varchar[(n)] |
char[(n [byte/char])] | char[(n)] |
nchar[(n)] | national char[(n)] |
number[(p[,s])] | decimal[(p[,s])] |
float(p)] | double |
long | longtext |
date | datetime |
binary_float | decimal(65,8) |
binary_double | double |
timestamp[(fractional_seconds_precision)] | datetime[(fractional_seconds_precision)] |
timestamp[(fractional_seconds_precision)]with localtimezone | datetime[(fractional_seconds_precision)] |
timestamp[(fractional_seconds_precision)]with localtimezone | datetime[(fractional_seconds_precision)] |
clob | longtext |
nclob | longtext |
blob | longblob |
raw | varbinary(2000) |
long raw | longblob |
bfile | 不支持 |
interval year(year_precision) to month | 不支持 |
interval day(day_precision)to second[(fractional_seconds_precision)] | 不支持 |
说明
- 对于char类型,当长度定义超过255时,DTS会将类型转换为varchar(n)。
- 由于MySQL本身不支持类似Oracle中的bfile、interval year to month和interval day tosecond数据类型,DTS在进行结构迁移时,无法在MySQL中找到合适的数据类型进行映射,因此这三种类型不会进行转化。
迁移时如果表中含有这三种类型,会导致结构迁移失败,在选择迁移对象时,对需要迁移的对象中这三种类型的列进行排除。
- 由于MySQL的timestamp类型不包含时区,而Oracle的timestamp with time zone和timestamp with local time zone默认带有时区信息,DTS在迁移这两种类型的数据时,会将其转换成UTC时区后存入目标实例。
从自建Oracle迁移至DRDS
Oracle数据类型 | DRDS数据类型 |
---|---|
varchar2(n [char/byte]) | varchar(n) |
nvarchar2[(n)] | national varchar[(n)] |
char[(n [byte/char])] | char[(n)] |
nchar[(n)] | national char[(n)] |
number[(p[,s])] | decimal[(p[,s])] |
float(p)] | double |
long | longtext |
date | datetime |
binary_float | decimal(65,8) |
binary_double | double |
timestamp[(fractional_seconds_precision)] | datetime[(fractional_seconds_precision)] |
timestamp[(fractional_seconds_precision)]with localtimezone | datetime[(fractional_seconds_precision)] |
timestamp[(fractional_seconds_precision)]with localtimezone | datetime[(fractional_seconds_precision)] |
clob | longtext |
nclob | longtext |
blob | longblob |
raw | varbinary(2000) |
long raw | longblob |
bfile | 不支持 |
interval year(year_precision) to month | 不支持 |
interval day(day_precision)to second[(fractional_seconds_precision)] | 不支持 |
说明
- 对于char类型,如果长度定义超过255,需要在DRDS中对应定义为varchar(n)。
- 由于DRDS实例的timestamp类型不包含时区,而Oracle的timestamp with time zone和timestamp with local time zone默认带有时区信息,DTS在迁移这两种类型的数据时,会将其转换成UTC时区后存入目标DRDS实例。
从自建Oracle迁移至RDS PPAS
Oracle数据类型 | PPAS数据类型 |
---|---|
varchar2(n [char/byte]) | varchar2[(n)] |
nvarchar2[(n)] | nvarchar2[(n)] |
char[(n [byte/char])] | char[(n)] |
nchar[(n)] | nchar[(n)] |
number[(p[,s])] | number[(p[,s])] |
float(p)] | double precision |
long | long |
date | date |
binary_float | real |
binary_double | double precision |
timestamp[(fractional_seconds_precision)] | timestamp[(fractional_seconds_precision)] |
timestamp[(fractional_seconds_precision)]with time zone | timestamp[(fractional_seconds_precision)]with time zone |
timestamp[(fractional_seconds_precision)]with local time zone | timestamp[(fractional_seconds_precision)]with time zone |
clob | clob |
nclob | nclob |
blob | blob |
raw | raw(size) |
long raw | long raw |
bfile | 不支持 |
interval year(year_precision) to month | 不支持 |
interval day(day_precision) to second[(fractional_seconds_precision)] | 不支持 |
说明 由于RDS PPAS不支持timestamp[(fractional_seconds_precision)]with local time zone,DTS在迁移这种类型的数据时,会将其转换成UTC时区后存入目标RDS
PPAS的timestamp[(fractional_seconds_precision)]with time zone中。
从自建Oracle迁移至云原生数据仓库AnalyticDB PostgreSQL
自建Oracle | 云原生数据仓库AnalyticDB PostgreSQL |
---|---|
VARCHAR2 | varchar/text |
BINARY_DOUBLE | double precision |
BINARY_FLOAT | double precision |
BINARY_INTEGER | integer |
BLOB | bytea |
CLOB | text |
DATE | timestamp |
DEC | decimal |
DECIMAL | decimal |
DOUBLE PRECISION | double precision |
FLOAT | double precision |
INT | int |
INTERGE | integer |
LONG | text |
LONG RAW | bytea |
NCLOB | text |
NUMBER | numeric |
PLS_INTEGER | integer |
RAW | bytea |
REAL | real |
ROWID | oid |
SMALLINT | smallint |
TIMESTAMP | timestamp |
TIMESTAMP WITH LOCAL TIME ZONE | timestamp with time zone |
TIMESTAMP WITH TIME ZONE | timestamp with time zone |
XMLTYPE | xml |
说明 对于云原生数据仓库AnalyticDB PostgreSQL不支持字段类型,DTS会将其直接转为bytea,如果转换不了则将数据内容置为null。