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

Oracle DUMP 函數深度解析:查看資料內部儲存格式、字符集、ASCII 碼對照

     編輯:Oracle 教學

Oracle DUMP 函數深度解析:查看資料內部儲存格式、字符集、ASCII 碼對照

DUMP(expr, [return_fmt], [start_pos], [length]) 是診斷資料儲存細節的利器:可顯示資料類型碼、長度、字符集、以及原始位元組值。本文完整說明參數、回傳格式、類型碼對照表、中文字元在 UTF8/GBK 下的儲存差異、數字內部編碼邏輯,並附 ASCII 碼對照表。

語法與參數

DUMP(expr [, return_fmt [, start_position [, length ]]])

-- 參數說明
expr            : 任意運算式 (欄位、常數、函數結果)
return_fmt      : 回傳格式 (預設 10)
    8   - 八進位
    10  - 十進位 (預設)
    16  - 十六進位
    17  - 字元顯示 (可列印字元顯示字元,不可列印顯示碼)
    1000+以上格式 - 在結果前加上字符集名稱 (如 1010=十進位+字符集, 1016=十六進位+字符集)
start_position  : 起始位置 (從 1 開始)
length          : 顯示長度

實戰範例與輸出解讀

-- 1. 基本字串
SELECT DUMP('abc') FROM dual;
-- Typ=96 Len=3: 97,98,99  (Typ=96 CHAR, Len=3 bytes, ASCII 97=a, 98=b, 99=c)

SELECT DUMP('abc', 16) FROM dual;
-- Typ=96 Len=3: 61,62,63  (十六進位 0x61=a)

SELECT DUMP('abc', 1016) FROM dual;
-- Typ=96 Len=3 CharacterSet=ZHS16GBK: 61,62,63  (含字符集)

SELECT DUMP('abc', 17, 2, 2) FROM dual;
-- Typ=96 Len=3: b,c  (從第 2 字元顯示 2 個字元)

Type 代碼對照表 (常見)

CodeType說明
1VARCHAR2變長字串
2NUMBER數字 (內部特殊編碼)
8LONG長文本 (已棄用)
12DATE日期 (7 位元組內部格式)
23RAW二進位
96CHAR定長字串
112CLOB大字元物件
113BLOB大二進位物件
180TIMESTAMP時間戳
181TIMESTAMP WITH TIME ZONE帶時區時間戳
231TIMESTAMP WITH LOCAL TIME ZONE本地時區時間戳

中文字元儲存差異:UTF8 vs GBK (ZHS16GBK)

-- UTF8 資料庫
SELECT DUMP('多多', 1010) FROM dual;
-- Typ=96 Len=6 CharacterSet=UTF8: 229,164,154,229,164,154
-- 每字 3 bytes: E4 B4 9A

-- GBK 資料庫
SELECT DUMP('多多', 1010) FROM dual;
-- Typ=96 Len=4 CharacterSet=ZHS16GBK: 182,224,182,224
-- 每字 2 bytes: B6 E0

數字內部儲存 (非直觀 ASCII)

Oracle NUMBER 採用可變長科學記號法儲存:1 位元組指數 + 1~20 位元組尾數,最高位為符號位。DUMP 顯示的十進位值為經過轉換的內部碼,不等於原數字。範例:

SELECT DUMP(123) FROM dual;    -- Typ=2 Len=2: 194,24  (指數 194=128+66, 尾數 24)
SELECT DUMP(-123) FROM dual;   -- Typ=2 Len=2: 61,233  (指數 61=128-67, 尾數 233=256-23)
SELECT DUMP(0) FROM dual;      -- Typ=2 Len=1: 128     (特殊編碼)
SELECT DUMP(1.5) FROM dual;    -- Typ=2 Len=2: 193,26

ASCII 碼快速對照表 (關鍵段)

碼字元碼字元碼字元碼字元
32Space48065A97a
33!49166B98b
34"50267C99c
35#51368D100d
36$52469E101e
37%53570F102f
38&54671G103g
39'55772H104h
40(56873I105i
41)57974J106j
42*58:75K107k
43+59;76L108l
44,60<77M109m
45-61=78N110n
46.62>79O111o
47/63?80P112p

實務應用場景

  • 排查 ORA-01401: inserted value too large for column 實際位元組長度
  • 驗證資料庫字符集 (CharacterSet 欄位)
  • 分析匯入資料的亂碼根因 (比對預期與實際位元組)
  • 理解 NUMBER/DATE 內部格式以優化儲存或跨平台遷移
  • 配合 CHR()、ASCII() 進行字元轉換驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved