OceanBase RAW數(shù)據(jù)類型

2021-06-29 15:02 更新

RAW 是一種可變長度的數(shù)據(jù)類型,在不同平臺上傳輸時,傳送的都是二進制信息,即使字符集不同也不需要轉(zhuǎn)換。OceanBase 數(shù)據(jù)庫中用于保存二進制數(shù)據(jù)或字節(jié)字符串。

RAW 類似于 VARCHAR2,聲明方式是 RAW(length)length 為長度,以字節(jié)為單位,作為數(shù)據(jù)庫列最大存儲 2000 個字節(jié),作為變量最大存儲 2000 字節(jié)。

語法

RAW(length)

參數(shù)

參數(shù)

說明

length

表示長度,以字節(jié)為單位,作為數(shù)據(jù)庫列最大存儲 2000 字節(jié)的數(shù)據(jù),作為變量最大存儲 2000 字節(jié)的數(shù)據(jù)。

示例

  • 示例 1: 在 test_raw 表中聲明 RAW 型數(shù)據(jù),并向表中插入一條數(shù)據(jù)。

CREATE TABLE test_raw (c1 RAW(10));
INSERT INTO test_raw VALUES (utl_raw.cast_to_raw('1234567890'));

執(zhí)行以下語句:

SELECT utl_raw.cast_to_varchar2(c1) FROM test_raw;

查詢結(jié)果如下:

+-------------------------------+
|    UTL_RAW.CAST_TO_RAW(C1)    |
+-------------------------------+
|          1234567890           | 
+-------------------------------+
  • 示例 2: 向 raw_test 表中插入 2 條數(shù)據(jù)。

CREATE TABLE raw_test (id number, raw_date raw(10));
INSERT INTO raw_test VALUES  (1, hextoraw('ff'));
INSERT INTO raw_test VALUES  (2, utl_raw.cast_to_raw('051'));

執(zhí)行以下語句:

SELECT * FROM raw_test;

查詢結(jié)果如下:

+------+----------+
| ID   | RAW_DATE |
+------+----------+
|    1 | FF       |
|    2 | 303531   |
+------+----------+

SQL 函數(shù) HEXTORAW() 會把字符串中數(shù)據(jù)轉(zhuǎn)換為 16 進制數(shù)。SQL 函數(shù) UTL_RAW.CAST_TO_RAW([VARCHAR2]) 會把字符串中每個字符的 ASCII 碼存放到 RAW 類型的字段中。例如,051 轉(zhuǎn)換為 303531。

  • 示例 3: OceanBase 數(shù)據(jù)庫將 RAW 數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù),每個字符代表 RAW 數(shù)據(jù)的四個連續(xù)位的十六進制數(shù)(0~9 和 A~F 或 a~f)。

如:二進制位數(shù) 11001011,其 RAW 數(shù)據(jù)轉(zhuǎn)換后為字符 CB。

OceanBase 數(shù)據(jù)庫將字符數(shù)據(jù)轉(zhuǎn)換為 RAW,它是把每個連續(xù)的輸入字符解釋為二進制數(shù)據(jù)的四個連續(xù)位,通過把這些位進行級聯(lián),來構(gòu)建結(jié)果 RAW 值。

注意 
如果任一輸入字符不是十六進制數(shù)(0~9 和 A~F 或 a~f),則將報告錯誤。如果字符數(shù)為奇數(shù),則結(jié)果不確定。

更多信息

字符轉(zhuǎn)換

在數(shù)據(jù)庫之間傳輸數(shù)據(jù),或者在數(shù)據(jù)之間傳輸數(shù)據(jù)庫字符集和客戶端字符集時,OceanBase 數(shù)據(jù)庫會自動在不同數(shù)據(jù)庫字符集之間轉(zhuǎn)換 CHAR 和 VARCHAR2 數(shù)據(jù)。而傳輸 RAW 數(shù)據(jù)時 OceanBase 數(shù)據(jù)庫不執(zhí)行字符轉(zhuǎn)換。

RAW 的函數(shù)

函數(shù)

說明

HEXTORAW()

當(dāng)使用 hextoraw 時,會把字符串中數(shù)據(jù)轉(zhuǎn)換成 16 進制串,字符串中的每兩個字符表示了結(jié)果 RAW 中的一個字節(jié)。

RAWTOHEX(rawvalue)

將 RAW 類數(shù)值 rawvalue 轉(zhuǎn)換為一個相應(yīng)的十六進制表示的字符串。

rawvalue 中的每個字節(jié)都被轉(zhuǎn)換為一個雙字節(jié)的字符串。

UTL_RAW_CAST_TO_RAW([VARCHAR2])

保持?jǐn)?shù)據(jù)的存儲內(nèi)容不變,僅改變數(shù)據(jù)類型,將 VARCHAR2 轉(zhuǎn)換為 RAW 類型。

UTL_RAW_CAST_TO_VARCHAR2([RAW])

保持?jǐn)?shù)據(jù)的存儲內(nèi)容不變,僅改變數(shù)據(jù)類型,將 RAW 類型轉(zhuǎn)換為 VARCHAR2 類型。

UTL_RAW.BIT_OR()、UTL_RAW.BIT_AND()、UTL_RAW.BIT_XOR()

位操作。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號