由于异构数据库之间支持的数据类型不一样,数据类型无法一一对应,所以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数据类型 DTS是否支持
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数据类型 DTS是否支持
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数据类型 DTS是否支持
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 year to month 不支持
interval day(day_precision) to second[(fractional_seconds_precision)] interval day 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中。