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

Oracle三大核心資料類型全解析:字元、數值、特殊類型深度指南

     編輯:Oracle 資料庫基礎

資料類型分類總覽

Oracle資料類型分為三大類:字元類型、數值類型、其他特殊類型。正確選型直接影響儲存效率、查詢效能與應用正確性。

一、字元資料類型

類型長度範圍儲存特性適用場景建議
CHAR1-2000位元組固定長度,不足右補空格固定長度代碼(如身分證字號、國別代碼)慎用,浪費空間
VARCHAR21-4000位元組可變長度,實際長度儲存通用字串欄位(姓名、地址、描述)首選字元類型
NCHAR1-2000字元固定長度,使用NLS字符集多語言固定長度欄位特定國際化需求
NVARCHAR21-4000字元可變長度,使用NLS字符集多語言可變長度欄位國際化應用首選
LONG2GB舊版大物件,限制多歷史系統相容棄用,改用CLOB
CLOB/NCLOB4GB大字元物件,支援隨機存取長文本、日志、JSON/XML文檔大文本首選

關鍵差異:CHAR vs VARCHAR2

-- CHAR(10) 存 'ABC' → 實際佔用10位元組 'ABC       '
-- VARCHAR2(10) 存 'ABC' → 實際佔用3位元組 'ABC'
-- 查詢時:WHERE char_col = 'ABC' 需注意空格匹配問題

Oracle官方強烈建議:優先使用VARCHAR2,節省空間並避免空格比較陷阱。

國際化支援:NLS字符集

  • 資料庫建立時指定主字符集(如AL32UTF8)
  • 可指定輔助字符集(National Character Set)
  • NCHAR/NVARCHAR2使用輔助字符集,適合多語言混存環境
  • Oracle 9i+支援以「字元」而非「位元組」定義N類型長度

二、數值資料類型

NUMBER精度與刻度完整語法

NUMBER[(precision[, scale])]
-- precision: 有效數字總位數 (1-38),預設38
-- scale: 小數點右邊位數 (-84 到 127),預設0
定義含義範例儲存值實際儲存
NUMBER(6,2)共6位,2位小數1234.561234.56
NUMBER(6,-2)小數點左移2位123456123500 (四捨五入)
NUMBER(*,3)精度最大,3位小數1.23451.235

日期時間類型

類型精度儲存大小特色
DATE秒7位元組含年月日時分秒,標準格式DD-MON-YY HH:MI:SS
TIMESTAMP奈秒7-11位元組高精度,支援時區無關
TIMESTAMP WITH TIME ZONE奈秒13位元組含時區位移,跨時區應用必備
TIMESTAMP WITH LOCAL TIME ZONE奈秒7-11位元組自動轉換至資料庫/會話時區
INTERVAL YEAR TO MONTH月5位元組年月間隔
INTERVAL DAY TO SECOND奈秒11位元組天秒間隔

日期格式控制: NLS_DATE_FORMAT參數、ALTER SESSION SET NLS_DATE_FORMAT、TO_DATE/TO_CHAR格式模型。

三、其他特殊資料類型

二進制與原始資料

類型最大長度用途
RAW2000位元組位圖、加密金鑰、二進制簽名
LONG RAW2GB舊版大二進制,棄用改用BLOB
BLOB4GB圖片、文件、多媒體、序列化物件
BFILEOS檔案大小唯讀外部檔案指標,資料庫不儲存內容

ROWID與UROWID

  • ROWID:物理地址偽欄,最快單行存取路徑
  • 特性:匯出/匯入、分區移動後會變更,不可長期儲存依賴
  • UROWID:通用ROWID,支援索引組織表、外部表

大型物件(LOB)家族

類型資料內容事務支援管理介面
CLOB字元資料完整支援DBMS_LOB / OCI / JDBC
NCLOBNLS字元資料
BLOB二進制資料

LOB可儲存於資料庫內(內部LOB)或指向外部檔案(BFILE)。Oracle 9i+提供LONG→LOB自動轉換功能。

新世代類型(Oracle 9i+)

  • XMLType:原生XML文檔儲存、查詢、索引(XPath、XQuery)
  • 用戶自定義類型:物件型別、集合型別(VARRAY、Nested Table)
  • AnyType/AnyData/AnyDataSet:動態型別系統,支援任意資料結構封裝

四、類型轉換與操作規則

隱式轉換規則

Oracle依上下文自動轉換(如數字||字串→字串,字串比較數字→數字)。風險:隱式轉換導致索引失效、效能損耗、結果不可預期。

顯式轉換函數

TO_CHAR(number|date, fmt)   -- 轉字串
TO_NUMBER(char, fmt)        -- 轉數字
TO_DATE(char, fmt)          -- 轉日期
CAST(expr AS type)          -- ANSI標準轉換

字串連接

-- 連接運算子 ||
SELECT 'Hello' || ' ' || 'World' FROM dual;  -- Hello World
-- 數字自動轉字串參與連接
SELECT 'Salary: ' || 50000 FROM dual;  -- Salary: 50000

NULL處理鐵律

  • NULL ≠ 空字串 ≠ 0 ≠ 任何值
  • 任何與NULL運算/比較結果為UNKNOWN(非TRUE/FALSE)
  • 檢測NULL唯一合法語法:IS NULL / IS NOT NULL
  • NVL(expr1, expr2)、COALESCE、NULLIF、NVL2處理空值

五、選型決策矩陣

業務需求推薦類型避免類型
固定長度代碼/標識CHAR / VARCHAR2NCHAR(除非多語言)
通用變長文字VARCHAR2CHAR, LONG
多語言文字NVARCHAR2VARCHAR2(單字符集環境)
大文本/文檔CLOBLONG, VARCHAR2(4000+)
精確金額計算NUMBER(precision, scale)FLOAT, BINARY_FLOAT
高精度時間戳TIMESTAMP(6)DATE(秒級精度不足時)
跨時區應用TIMESTAMP WITH TIME ZONEDATE, TIMESTAMP
二進制檔案/圖片BLOBLONG RAW, RAW(2000+)
外部大檔案引用BFILEBLOB(若不需資料庫管理)

總結

資料類型選型是資料庫設計的基石。核心原則:字元用VARCHAR2、數值用NUMBER(p,s)、大物件用LOB、日期用TIMESTAMP系列、國際化用N類型、特殊需求用XMLType/物件型別。嚴禁使用LONG/LONG RAW,嚴謹處理NULL語意,顯式控制類型轉換,建立統一的命名與選型規範。

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