首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料類型完整解析:CHAR/VARCHAR2、NUMBER、DATE、LOB 與 ROWID

     編輯:Oracle 資料庫基礎

概覽

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) 資料同對應基本型別多語系環境
LONG2 GB已棄用,僅支援單欄、無法索引、受限極多歷史系統維護,新開發禁用

關鍵差異:CHAR vs VARCHAR2

-- 建表測試
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)。
  • 範圍:-10125 ~ 10125(不含邊界)。
  • 常用別名(僅語法糖,內部皆為 NUMBER):
    • INTEGER = NUMBER(38,0)
    • FLOAT(n) = 二進制精度 n 位
    • BINARY_FLOAT/BINARY_DOUBLE:IEEE 754 單/雙精度浮點(10g+),高效能科學計算首選。

精度與標度範例

定義可存範圍範例
NUMBER(5,2)-999.99 ~ 999.99123.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日時分秒精確間隔

DATE 內部結構(7 Bytes)

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)

四、大物件 (LOB) 類型

類型資料性質最大尺寸儲存位置操作套件
BLOB二進制(圖片、影音、文件)4 GB * DB_BLOCK_SIZE資料庫內部 (可指定表空間)DBMS_LOB
CLOB字元大物件(長文本、XML、JSON)同上資料庫內部DBMS_LOB
NCLOBUnicode 字元大物件同上資料庫內部DBMS_LOB
BFILE外部二進制檔案(唯讀)OS 限制作業系統檔案系統DBMS_LOB (READ ONLY)

LOB 儲存選項

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 類型

  • RAW(n):可變長二進制,最大 2000 Bytes(表欄位) / 32767 Bytes (PL/SQL)。
  • LONG RAW:已棄用,遷移至 BLOB。
  • 用於儲存加密金鑰、雜湊值、二進制簽章等不需字元語意的資料。

六、ROWID 偽欄位

  • 每列隱含唯一識別碼,編碼:物件號.相對檔號.區塊號.列號。
  • SELECT ROWID, empno FROM emp; 可直接定位物理位置,最快單行存取路徑。
  • 不可更新、不可插入、跨表不具可比性(不同物件號)。
  • 10g+ 支援 UROWID 通用 ROWID(含索引組織表、外部表)。

七、選型決策樹

  1. 純文字、定長代碼 → CHAR
  2. 純文字、不定長 → VARCHAR2
  3. 多語系 → NVARCHAR2
  4. 整數/定點數 → NUMBER(p,0) / NUMBER(p,s)
  5. 高效能浮點運算 → BINARY_DOUBLE
  6. 日期時間(無時區) → DATE / TIMESTAMP
  7. 跨時區應用 → TIMESTAMP WITH TIME ZONE
  8. 大文本/文件 → CLOB / BLOB
  9. 外部唯讀檔案 → BFILE
  10. 二進制雜湊/金鑰 → RAW

總結

Oracle 型別系統以 NUMBER 統一數值、VARCHAR2 主導字元、LOB 處理非結構化資料、TIMESTAMP WITH TIME ZONE 解決全球化難題。深入理解儲存特性、比較語意、長度限制與操作套件,能讓您在建模、遷移、效能調優時做出精準選擇。

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