Oracle 資料類型大致分為:字元、數值、日期時間、大物件 (LOB)、二進制 (RAW) 及特殊類型 (ROWID)。正確選型關乎儲存效率、查詢效能與資料完整性。
| 類型 | 長度範圍 | 儲存特性 | 比較語意 | 典型用途 |
|---|---|---|---|---|
| CHAR(n) | 1~2000 Bytes | 固定長度,不足右補空格 | 忽略尾部空格:'AB' = 'AB ' | 固定長代碼(國別、幣別、狀態碼) |
| VARCHAR2(n) | 1~4000 Bytes (表欄位) 1~32767 Bytes (PL/SQL 變數) | 可變長度,實際長度儲存 | 尾部空格參與比較:'AB' < 'AB ' | 不定長文字(姓名、地址、描述) |
| NCHAR(n) / NVARCHAR2(n) | 同上(字元數) | 儲存 Unicode (NLS) 資料 | 同對應基本型別 | 多語系環境 |
| LONG | 2 GB | 已棄用,僅支援單欄、無法索引、受限極多 | 歷史系統維護,新開發禁用 |
-- 建表測試
CREATE TABLE t_test (c_char CHAR(10), c_vc VARCHAR2(10));
INSERT INTO t_test VALUES ('AB', 'AB');
-- 比較結果
SELECT * FROM t_test WHERE c_char = 'AB '; -- 找到(忽略尾部空格)
SELECT * FROM t_test WHERE c_vc = 'AB '; -- 找不到(尾部空格不同)
SELECT * FROM t_test WHERE c_vc = 'AB'; -- 找到
建議:除固定長代碼外,優先使用 VARCHAR2,節省空間、避免隱式轉換陷阱。
Oracle 單一 NUMBER 型別涵蓋所有數值需求:
NUMBER(p, s) — 精度 p (1~38),標度 s (-84~127)。INTEGER = NUMBER(38,0)FLOAT(n) = 二進制精度 n 位BINARY_FLOAT/BINARY_DOUBLE:IEEE 754 單/雙精度浮點(10g+),高效能科學計算首選。| 定義 | 可存範圍 | 範例 |
|---|---|---|
| NUMBER(5,2) | -999.99 ~ 999.99 | 123.45, -12.34 |
| NUMBER(6,-2) | -999900 ~ 999900 (百位精度) | 123400, -1200 |
| NUMBER(*,10) | 小數點後 10 位 | 0.1234567890 |
| 類型 | 精度 | 範圍 | 特性 |
|---|---|---|---|
| DATE | 秒 | 公元前 4712 年 ~ 公元 9999 年 | 含年月日時分秒,無時區 |
| TIMESTAMP(p) | 小數秒 (0~9 位,預設 6) | 同 DATE | 高精度,無時區 |
| TIMESTAMP(p) WITH TIME ZONE | 同前 | 同前 | 攜帶時區位移,跨時區應用必備 |
| TIMESTAMP(p) WITH LOCAL TIME ZONE | 同前 | 同前 | 資料庫時區儲存,客戶端自動轉換顯示 |
| INTERVAL YEAR TO MONTH | 年月 | 年月間隔 | |
| INTERVAL DAY TO SECOND | 日時分秒 | 精確間隔 |
Byte 1: Century + 100
Byte 2: Year + 100
Byte 3: Month (1-12)
Byte 4: Day (1-31)
Byte 5: Hour + 1 (1-24)
Byte 6: Minute + 1 (1-60)
Byte 7: Second + 1 (1-60)
| 類型 | 資料性質 | 最大尺寸 | 儲存位置 | 操作套件 |
|---|---|---|---|---|
| BLOB | 二進制(圖片、影音、文件) | 4 GB * DB_BLOCK_SIZE | 資料庫內部 (可指定表空間) | DBMS_LOB |
| CLOB | 字元大物件(長文本、XML、JSON) | 同上 | 資料庫內部 | DBMS_LOB |
| NCLOB | Unicode 字元大物件 | 同上 | 資料庫內部 | DBMS_LOB |
| BFILE | 外部二進制檔案(唯讀) | OS 限制 | 作業系統檔案系統 | DBMS_LOB (READ ONLY) |
CREATE TABLE t_doc (
id NUMBER PRIMARY KEY,
content CLOB
) LOB (content) STORE AS (
TABLESPACE lob_tbs
ENABLE STORAGE IN ROW -- 小於 4KB 存行內
CHUNK 8192 -- 讀寫塊大小
RETENTION -- 保留舊版本供一致性讀
CACHE -- 緩衝區快取
);
RAW(n):可變長二進制,最大 2000 Bytes(表欄位) / 32767 Bytes (PL/SQL)。LONG RAW:已棄用,遷移至 BLOB。物件號.相對檔號.區塊號.列號。SELECT ROWID, empno FROM emp; 可直接定位物理位置,最快單行存取路徑。UROWID 通用 ROWID(含索引組織表、外部表)。CHARVARCHAR2NVARCHAR2NUMBER(p,0) / NUMBER(p,s)BINARY_DOUBLEDATE / TIMESTAMPTIMESTAMP WITH TIME ZONECLOB / BLOBBFILERAWOracle 型別系統以 NUMBER 統一數值、VARCHAR2 主導字元、LOB 處理非結構化資料、TIMESTAMP WITH TIME ZONE 解決全球化難題。深入理解儲存特性、比較語意、長度限制與操作套件,能讓您在建模、遷移、效能調優時做出精準選擇。