最近在进行数据抽取的时候,设计到多个数据库,oracle、SqlServer、mysql。这个时候字段类型映射成了一个比较头疼的问题,所以想整理一下这三个常用数据库之间的字段类型比较。
1、常见类型的映射关系:
Sqlserver | mysql | oracle |
INT | INT | NUMBER |
TINYINT | TINYINT | NUMBER |
SMALLINT | INT | NUMBER |
BIGINT | BIGINT | NUMBER |
BIT | BIT | NUMBER |
DATETIME | DATETIME | DATE |
DATE | DATE | DATE |
DATETIME | DATETIME | DATETIME |
DATETIME2(7) | DATETIME | DATE |
TIME(7) | DATETIME | DATE |
IMAGE | MEDIUMBLOB | BLOB |
TEXT | MEDIUMTEXT | CLOB |
DECIMAL(5,2) | DECIMAL(5,2) | NUMBER(5,2) |
FLOAT | FLOAT | NUMBER |
MONEY | VARCHAR(20) | VARCHAR2(40) |
NCHAR(30) | NCHAR(30) | NCHAR(30) |
NVARCHAR(30) | NVARCHAR(30) | NVARCHAR2(60) |
VARCHAR(10 CHAR) | VARCHAR(20) | VARCHAR2(40) |
VARCHAR(20) | VARCHAR(20) | VARCHAR2(40) |
CHAR(10) | CHAR(10) | VARCHAR2(20) |
XML | VARCHAR(4000) | VARCHAR2(4000) |
2、一些小技巧:
a.目标库的字段长度要稍微的定大一些,比如源库mysql是CHAR(10),目标库最好用varchar(20),因为之前我遇到过字符长度不够的问题。
b、对于大多数的字段,要是一时不能确定转换什么类型的数据,可以先匹配成字符类型,因为后面转换起来,字符串的处理比较容易些。
c、转换到SqlServer数据库时,要是字符串类型,不含中文的用varchar,有中文的用nvarchar。
3、一个特殊的字段:向量字段。
在oracle中存在一个向量字段.(要想存向量字段的数据,必须做一些配置)
向量,理解起来就是方向+大小。oracle的向量字段也可以这么理解。在转换到其他数据库时,就需要把一个字段编程两个字段。
下面是把oracle一个向量字段转换到mysql数据库中,在从mysql转换到oracle中的过程。
oracle | mysql | oracle |
ST_GEOMETRY(256) | 转换成blob和int | ST_GEOMETRY(256) |
源适配器:sde.st_asbinary(SHAPE),sde.st_srid(SHAPE) SHAPE为ST_GEOMETRY类型,用函数转换成blob和int类型 | ||
目标适配器:sde.st_geomfromwkb(wkb,srid) 将转换成的blob和int类型数据,再次转换成ST_GEOMETRY类型(wkb,srid为上一步装换成的blob和int类型) |