由于异构数据库之间支持的数据类型不一样,数据类型无法一一对应,所以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。