| 型別 | 對應傳統型別 | 資料庫欄位上限 | PL/SQL 變數上限 |
|---|---|---|---|
| RAW | CHAR | 2,000 位元組 | 32,767 位元組 |
| LONG RAW | LONG | 2 GB | 32,760 位元組 |
宣告語法:RAW(L),L 為位元組長度。
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;
'FF' → 位元組 0xFF (1 位元組)'051' → 3 位元組 0x30 0x35 0x31SELECT id, raw_data, DUMP(raw_data, 16) AS dump_raw FROM raw_test;
第 2 參數 16 表示以十六進位顯示,便於檢視原始位元組。
依預設字符集(如 ZHS16GBK/AL32UTF8)將 VARCHAR2 轉為 RAW。
INSERT INTO cmpp_submit (dest_terminal_id, msg_content)
VALUES ('13001081371', UTL_RAW.CAST_TO_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 中的二進位資料儲存與交換需求。