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

Oracle RAW 型別深度解析:儲存機制、轉換函數與實戰操作

     編輯:Oracle 資料庫基礎

RAW 型別家族

型別對應傳統型別資料庫欄位上限PL/SQL 變數上限
RAWCHAR2,000 位元組32,767 位元組
LONG RAWLONG2 GB32,760 位元組

宣告語法:RAW(L),L 為位元組長度。

核心 DDL/DML 實戰

建表

CREATE TABLE raw_test (id NUMBER, raw_data RAW(10));

插入資料 — 兩種核心方式

-- 方式 1:HEXTORAW 將十六進位字串轉為二進位
INSERT INTO raw_test VALUES (1, HEXTORAW('FF'));

-- 方式 2:UTL_RAW.CAST_TO_RAW 將字串 ASCII 碼直接存入
INSERT INTO raw_test VALUES (UTL_RAW.CAST_TO_RAW('051'));

刪除表

DROP TABLE raw_test;

關鍵差異:HEXTORAW vs CAST_TO_RAW

  • HEXTORAW:將字串視為十六進位數值解析。'FF' → 位元組 0xFF (1 位元組)
  • UTL_RAW.CAST_TO_RAW:將字串每個字元的 ASCII/字符集編碼直接存入。'051' → 3 位元組 0x30 0x35 0x31

驗證儲存內容:DUMP 函數

SELECT id, raw_data, DUMP(raw_data, 16) AS dump_raw FROM raw_test;

第 2 參數 16 表示以十六進位顯示,便於檢視原始位元組。

RAW ↔ VARCHAR2 互轉雙核函數

1. UTL_RAW.CAST_TO_RAW — 字串 → RAW

依預設字符集(如 ZHS16GBK/AL32UTF8)將 VARCHAR2 轉為 RAW。

INSERT INTO cmpp_submit (dest_terminal_id, msg_content)
VALUES ('13001081371', UTL_RAW.CAST_TO_RAW('您好!'));

2. UTL_RAW.CAST_TO_VARCHAR2 — RAW → 字串

依預設字符集將 RAW 還原為 VARCHAR2。

SELECT UTL_RAW.CAST_TO_VARCHAR2(msg_content) FROM cmpp_deliver;

底層儲存結構揭祕

VARCHAR2 內部結構:

struct { ub2 len; char arr[n]; }

VARRAW (RAW 內部實際儲存):

struct { ub2 len; unsigned char arr[n]; }

關鍵差異:unsigned char vs char。RAW 儲存二進位值,永不進行自動字符集轉換,這是 RAW 與 VARCHAR 最大不同。RAW 屬外部型別,內部實為 VARRAW。

實戰場景

  • 簡訊/通訊協定封包儲存(原始位元組流)
  • 加密/雜湊值儲存(二進位摘要)
  • 圖片/檔案二進位片段儲存
  • 跨字符集環境下的二進位資料傳輸中繼

掌握 RAW 型別的「不轉換」特性與兩大轉換函數,即可從容處理 Oracle 中的二進位資料儲存與交換需求。

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