SQL Server 遷移 Oracle 時,資料類型映射是首要挑戰。本文提供雙向對照表,標註精度差異、NOT NULL 限制與特殊處理建議。
| SQL Server | Oracle 對應類型 | 備註 |
|---|---|---|
| bigint | NUMBER(19,0) | 8 位元組整數 |
| binary(n) | RAW(n) | 固定長度二進制,n ≤ 2000 |
| varbinary(max) | BLOB | 大型二進制 |
| bit | NUMBER(1,0) 或 CHAR(1) 'Y'/'N' | Oracle 無布林型別 |
| char(n) | CHAR(n BYTE) / CHAR(n CHAR) | n ≤ 2000 |
| varchar(n) | VARCHAR2(n BYTE) / VARCHAR2(n CHAR) | n ≤ 4000 |
| varchar(max) | CLOB | 大型字串 |
| nchar(n) | NCHAR(n) | Unicode 固定長度,n ≤ 1000 |
| nvarchar(n) | NVARCHAR2(n) | Unicode 變長,n ≤ 2000 |
| nvarchar(max) | NCLOB | Unicode 大型字串 |
| date | DATE (僅日期部分) | SQL Server 2008+ date 僅含日期 |
| datetime | DATE | 精度至 3.33 ms,Oracle DATE 至秒 |
| datetime2 | TIMESTAMP(7) | 納秒精度 |
| datetimeoffset | TIMESTAMP(7) WITH TIME ZONE | 含時區 |
| smallmoney / money | NUMBER(19,4) | 固定 4 位小數 |
| decimal(p,s) / numeric(p,s) | NUMBER(p,s) | 精度完整對應 |
| float / real | BINARY_DOUBLE / BINARY_FLOAT | IEEE 754 雙/單精度 |
| int | NUMBER(10,0) | 4 位元組整數 |
| smallint | NUMBER(5,0) | 2 位元組整數 |
| tinyint | NUMBER(3,0) | 1 位元組無號整數 |
| uniqueidentifier | RAW(16) 或 CHAR(36) | GUID,建議 RAW(16) 存儲效率高 |
| xml | XMLTYPE | Oracle 原生 XML 支援 |
| timestamp / rowversion | RAW(8) 或 NUMBER | 版本戳,非日期時間 |
| sql_variant | 不支援直接映射 | 需拆分為多欄位或存 JSON/CLOB |
| hierarchyid / geometry / geography | 不支援直接映射 | 需用 SDO_GEOMETRY 或自定義邏輯 |
CHAR(n CHAR) / VARCHAR2(n CHAR) 以字元數定義長度,避免多位元組字元截斷。datetime 精度 3.33 ms,Oracle DATE 僅至秒;遷移高精度時間請用 TIMESTAMP(3)。CHAR/VARCHAR 預設 NOT NULL 需顯式指定;Oracle 預設允許 NULL,遷移腳本需補齊 NOT NULL 約束。IDENTITY 對應 Oracle 12c GENERATED AS IDENTITY 或傳統 SEQUENCE + TRIGGER。VARCHAR(MAX)/VARBINARY(MAX) → CLOB/BLOB,遷移工具需支援 LOB 串流傳輸。