首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 與 Oracle 資料類型完整對照表:雙向遷移參考指南

     編輯:Oracle 資料庫相關知識

異構資料庫遷移 (SQL Server ↔ Oracle) 時,資料類型對應是 Schema 轉換的核心。本文提供雙向完整對照表、精度/長度/語意差異說明、遷移陷阱與自動化工具建議。

SQL Server → Oracle 對照表

SQL Server 型別長度/精度Oracle 對應型別備註
bigint8 bytesNUMBER(19)-2^63 ~ 2^63-1
binary(n)n ≤ 8000RAW(n)固定長度二進位
bit1 bitNUMBER(1) 或 CHAR(1) 'Y'/'N'Oracle 無布林型別
char(n)n ≤ 8000CHAR(n [BYTE/CHAR])注意語意:BYTE vs CHAR
date3 bytesDATESQL Server date 僅日期,Oracle DATE 含時間
datetime8 bytesDATE 或 TIMESTAMP(3)精度 3.33ms vs 1ns
datetime2(n)6-8 bytesTIMESTAMP(n)建議映射 TIMESTAMP
datetimeoffset(n)8-10 bytesTIMESTAMP(n) WITH TIME ZONE
decimal(p,s) / numeric(p,s)p ≤ 38NUMBER(p,s)完全相容
float(n)24/53 bitsBINARY_DOUBLEIEEE 754 雙精度
real24 bitsBINARY_FLOATIEEE 754 單精度
image2^31-1 bytesBLOB已棄用,SQL Server 建議 varbinary(max)
int4 bytesNUMBER(10)-2^31 ~ 2^31-1
money / smallmoney8/4 bytesNUMBER(19,4) / NUMBER(10,4)固定 4 位小數
nchar(n) / nvarchar(n)n ≤ 4000NCHAR(n) / NVARCHAR2(n)Unicode (UTF-16)
ntext2^30-1 charsNCLOB已棄用,建議 NVARCHAR2(MAX)
smalldatetime4 bytesDATE精度 1 分鐘
smallint2 bytesNUMBER(5)-32768 ~ 32767
sql_variant8016 bytes無直接對應建議拆分多欄位或用 JSON/XML
text2^31-1 charsCLOB已棄用,建議 VARCHAR2(MAX) / CLOB
time(n)3-5 bytesINTERVAL DAY TO SECOND(n)或 VARCHAR2 存 ISO 格式
timestamp / rowversion8 bytesRAW(8) / NUMBER非日期時間,為版本戳
tinyint1 byteNUMBER(3)0 ~ 255
uniqueidentifier16 bytesRAW(16) 或 CHAR(32)GUID,建議 RAW(16) 存二進位
varbinary(n/max)n ≤ 8000 / maxRAW(n) / BLOB
varchar(n/max)n ≤ 8000 / maxVARCHAR2(n [BYTE/CHAR]) / CLOBMAX → CLOB
xml--XMLType原生 XML 支援
hierarchyid--無直接對應建議 VARCHAR2 存路徑字串或拆分欄位
geometry / geography--SDO_GEOMETRY (Spatial)需 Oracle Spatial/Locator

Oracle → SQL Server 對照表

Oracle 型別SQL Server 對應型別備註
BINARY_DOUBLEfloat(53)
BINARY_FLOATreal
BLOBvarbinary(max)
CLOB / NCLOBvarchar(max) / nvarchar(max)
CHAR(n [BYTE/CHAR])nchar(n) / char(n)BYTE/CHAR 語意差異
DATEdatetime2(0) / datetime含時間元件
TIMESTAMP(n)datetime2(n)
TIMESTAMP(n) WITH TIME ZONEdatetimeoffset(n)
TIMESTAMP(n) WITH LOCAL TIME ZONEdatetimeoffset(n)應用層處理時區
INTERVAL DAY TO SECONDvarchar(30) / 時間存秒數無原生對應
INTERVAL YEAR TO MONTHvarchar(14) / 存月數無原生對應
LONG / LONG RAWvarchar(max) / varbinary(max)已棄用,遷移時轉 CLOB/BLOB
NCHAR(n) / NVARCHAR2(n)nchar(n) / nvarchar(n)
NUMBER(p,s)decimal(p,s)p>38 需拆分
NUMBER (無精度)decimal(38,*) / float視實際資料範圍
RAW(n)varbinary(n)
ROWID / UROWIDchar(18) / binary(16)不建議遷移
VARCHAR2(n [BYTE/CHAR])nvarchar(n) / varchar(n)BYTE/CHAR 注意
XMLTypexml
SDO_GEOMETRYgeometry / geography需 SQL Server Spatial

遷移關鍵差異與陷阱

議題SQL ServerOracle處理策略
字元長度語意永遠以位元組計CHAR/BYTE vs CHAR 語意 (NLS_LENGTH_SEMANTICS)遷移時統一用 CHAR 語意,或依實際資料長度計算位元組上限
日期時間精度datetime 3.33ms, datetime2 100nsDATE 1秒, TIMESTAMP 1ns映射至 datetime2/TIMESTAMP 保留精度
空字串 vs NULL'' ≠ NULL'' = NULL應用層邏輯需調整,或用 ' ' 代替空字串
大小寫敏感度依 Collation (預設 CI)預設敏感 (二進位比較)建立語言索引 (NLS_COMP=LINGUISTIC) 或應用層統一大小寫
自動編號IDENTITYSequence + Trigger / Identity Column (12c+)12c+ 用 GENERATED AS IDENTITY,舊版建 Sequence+Trigger
資料列版本ROWVERSION / timestampORA_ROWSCN / 觸發器維護版本欄樂觀鎖邏輯需重寫
JSON 支援JSON 函數 (2016+)JSON 函數 (12c+), JSON 資料型別 (21c+)語法不同,查詢需改寫

自動化遷移工具建議

  • Oracle SQL Developer Migration Workbench:免費、GUI、支援 SQL Server 離線/線上遷移、類型映射自訂。
  • AWS Schema Conversion Tool (SCT):支援多種來源/目標、評估報告、程式碼轉換。
  • SSMA (SQL Server Migration Assistant for Oracle):微軟官方,Oracle → SQL Server 專用。
  • Flyway / Liquibase + 手工調整:版控遷移腳本,適合持續交付管線。

驗證清單

  • ☐ 所有資料行類型映射確認、精度足夠
  • ☐ 主鍵/唯一/外鍵/檢查約束完整轉換
  • ☐ 索引類型 (Clustered/Nonclustered ↔ B-tree/Bitmap/Function-based) 對應
  • ☐ 視圖/觸發器/預存程序/函數語法改寫完成
  • ☐ 空字串/NULL 語意差異測試通過
  • ☐ 大物件 (LOB) 匯入/匯出驗證
  • ☐ 應用層連線字串、驅動、參數繫結更新

資料類型映射只是遷移第一步;語意差異、應用邏輯改寫、效能基準測試才是成敗關鍵。建議採「工具生成骨架 → 專家審查調整 → 分批驗證 → 全量遷移」四階段策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved