工具:SQL Server和Oracle数据类型比对

今天在用Kettle做数据迁移的时候遇到一个问题,通过Kettle把从SQL Server的源数据导入到Oracle数据库中出现很多问题,也就是因为表信息不一致造成数据无法导入。源数据库SQL Server因为表比较复杂,就直接从SQL Server Mangement Studio手动方式导出建表的SQL语句,具体过程是:选择需要查看的表->右键“编写表脚本为”->CREATE到->文件,这个时候会弹出一个目录保存建表语句内容。目的数据库中需要创建一份一致的表结构,方便从源数据库中加载数据过来。
工具:SQL Server和Oracle数据类型比对_第1张图片
我们都知道虽然SQL Server和Oracle都支持标准的SQL语句,但是每家厂商的支持方式是有差异的,并不完全一直,而且两家厂商的SQL语句是不可以共用的,这个时候如果要完成数据表的迁移就需要修改建表语句,以支持Kettle可以无障碍迁移数据,特别是两者的数据类型差异还是很大的,所以笔者基于此整理了一份两者差异对比表,供读者查询使用。

SQL Server 数据类型 Oracle 数据类型
bigint NUMBER(19,0)
binary(1-2000) RAW(1-2000)
binary(2001-8000) BLOB
bit NUMBER(1)
char(1-2000) CHAR(1-2000)
char(2001-4000) VARCHAR2(2001-4000)
char(4001-8000) CLOB
date DATE
datetime DATE
datetime2(0-7) TIMESTAMP(7)(对于 Oracle 9 和 Oracle 10);VARCHAR(27)(对于 Oracle 8)
datetimeoffset(0-7) TIMESTAMP(7) WITH TIME ZONE(对于 Oracle 9 和 Oracle 10);VARCHAR(34)(对于 Oracle 8)
decimal(1-38, 0-38) NUMBER(1-38, 0-38)
float(53) FLOAT
float FLOAT
地理 BLOB
geometry BLOB
hierarchyid BLOB
图像 BLOB
int NUMBER(10,0)
money NUMBER(19,4)
nchar(1-1000) CHAR(1-1000)
nchar(1001-4000) NCLOB
ntext NCLOB
numeric(1-38, 0-38) NUMBER(1-38, 0-38)
nvarchar(1-1000) VARCHAR2(1-2000)
nvarchar(1001-4000) NCLOB
nvarchar(max) NCLOB
real real
smalldatetime DATE
int NUMBER(5,0)
smallmoney NUMBER(10,4)
sql_variant N/A
sysname VARCHAR2(128)
text CLOB
time(0-7) VARCHAR(16)
timestamp RAW(8)
tinyint NUMBER(3,0)
uniqueidentifier CHAR(38)
varbinary(1-2000) RAW(1-2000)
varbinary(2001-8000) BLOB
varchar(1-4000) VARCHAR2(1-4000)
varchar(4001-8000) CLOB
varbinary(max) BLOB
varchar(max) CLOB
xml NCLOB

项目使用的MSSQL的sql文件和最终转成ORACLE的sql文件,可以通过Github访问,访问地址如下:
Github代码访问

声明: 本文数据类型比对表非笔者原创,主要引用自笨笨鱼~的博客文章Oracle和sqlserver数据类型对应

参考文献

  1. Oracle和sqlserver数据类型对应

你可能感兴趣的:(工具)