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

Oracle 10g 數據類型深度解析:CHAR 存儲機制與空間浪費實測

     編輯:Oracle 資料庫基礎

理解數據類型的物理存儲特性,是設計高性能表結構的基石。本文以 Oracle 10g 為基準,通過 DUMP 函數實測 CHAR 定長特性,揭示空間浪費真相,為類型選擇提供量化依據。

一、CHAR 定長特性定義

  • 固定長度字符串,不足長度**右側空格填充**至聲明長度。
  • 最大 2000 字節。
  • 內部類型碼:TYP=96。

二、實測環境構建

CREATE TABLE test_char (col_a CHAR(10));

INSERT INTO test_char VALUES ('a');
INSERT INTO test_char VALUES ('aa');
INSERT INTO test_char VALUES ('aaa');
INSERT INTO test_char VALUES ('aaaa');
INSERT INTO test_char VALUES ('aaaaaaaaaa');  -- 滿 10 字節
-- INSERT INTO test_char VALUES ('aaaaaaaaaaa'); -- ORA-12899: value too large

三、DUMP 函數揭示物理存儲

SELECT col_a, DUMP(col_a) FROM test_char;

輸出解讀:

數據DUMP 輸出解析
aTyp=96 Len=10: 97,32,32,32,32,32,32,32,32,321 個有效字節 + 9 個空格(0x20)
aaTyp=96 Len=10: 97,97,32,32,32,32,32,32,32,322 個有效 + 8 空格
aaaTyp=96 Len=10: 97,97,97,32,32,32,32,32,32,323 有效 + 7 空格
aaaaTyp=96 Len=10: 97,97,97,97,32,32,32,32,32,324 有效 + 6 空格
aaaaaaaaaaTyp=96 Len=10: 97,97,97,97,97,97,97,97,97,97無填充,滿長度

四、關鍵結論

  1. 存儲長度固定:LEN=10 恒定,與實際內容無關。
  2. 空間浪費嚴重:短字符串佔用完整聲明長度,大表下空間膨脹顯著。
  3. 比較語義陷阱:CHAR 比較時**不忽略尾部空格**,'a' = 'a ' 為 TRUE,但 VARCHAR2 則為 FALSE。
  4. 適用場景:長度固定、高頻更新的短代碼列(如性別 M/F、狀態碼 Y/N、ISO 幣種代碼)。
  5. 不適用場景:可變長度業務字段(姓名、地址、描述),**首選 VARCHAR2**。

五、輔助函數

  • CHR(97) → 'a':ASCII 碼轉字符
  • ASCII('a') → 97:字符轉 ASCII 碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved