---
title: "RAW 数据类型 | OceanBase 文档中心"
description: RAW 数据类型 RAW 是一种可变长度的数据类型，可以在具有不同字符集的数据库之间，或者具有不同字符集的服务器和客户端之间传输二进制数据流，而不需要字符集转换。本文主要介绍 RAW 数据类型的语法、参数和使用说明。 RAW 数据类型可以用于存储二进制数据或者字节串，例如图像、音频等。 RAW 数据类型的 SQL 语…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.0.0 企业版

# RAW 数据类型

更新时间：2026-06-03 11:43:57

RAW 是一种可变长度的数据类型，可以在具有不同字符集的数据库之间，或者具有不同字符集的服务器和客户端之间传输二进制数据流，而不需要字符集转换。本文主要介绍 RAW 数据类型的语法、参数和使用说明。

`RAW` 数据类型可以用于存储二进制数据或者字节串，例如图像、音频等。

RAW 数据类型的 SQL 语法如下：

```sql
RAW(length)

```

其中，参数 `length` 表示长度，以字节为单位。如果作为数据库中表的列，该参数最大支持存储 2000 字节的数据；如果作为 PL 变量，该参数最大支持存储 32767 字节的数据。

## 使用说明

### 隐式转换规则

当数据库需要将 `RAW` 类型的数据隐式转换为字符类型（`CHAR`、`VARCHAR2` 等）数据时，转换后的每个字符对应 RAW 类型数据的四个连续位表示的十六进制数（0~9 和 A~F 或 a~f）。例如，存储 `RAW` 类型数据的二进制位为 11001011（8 位，即一个字节），转换后为字符类型数据 'CB' （两个字节）。

当数据库将字符类型数据隐式转换为 `RAW` 类型时，会把字符串中每个字符代表的十六进制数转换成四个位，例如，字符串 'AB' 将被转换为 0XAB (10101011)。

> **注意**
>
>  
>
> 如果任一输入字符不是十六进制数（0~9 和 A~F 或 a~f），则将报错。如果字符数为奇数，则会在 `RAW` 类型数据开头补 0 至 `RAW` 类型的长度占满整字节。例如，将字符串 'ABC' 转换为 `RAW` 类型时，会将其转换为 0x0ABC，其中 0x0A 占一个字节，0xBC 占一个字节。

### 显式转换方式

SQL 函数 `RAWTOHEX()` 和 `HEXTORAW()` 执行与上述隐式转换等效的显式转换。使用 PL 系统包 UTL_RAW 和 UTL_I18N 中的函数，可以在 `RAW` 和字符数据之间进行其他类型的转换。

SQL 函数 `HEXTORAW()` 会把字符串中数据转换为十六进制数。SQL 函数 `UTL_RAW.CAST_TO_RAW([VARCHAR2])` 会把字符串中每个字符的 ASCII 码存放到 `RAW` 类型的字段中。例如，将 **051** 转换为 **303531** 。

通过隐式调用 SQL 函数 `RAWTOHEX()` 可以把十六进制串表示的 `RAW` 类型转换为字符串类型（`VARCHAR`），也就是十六进制数据的字符串表示形式。

`RAW` 数据类型相关函数如下表所示。

| 函数 | 说明 |
| --- | --- |
| HEXTORAW() | 当使用 `hextoraw` 时，会把字符串中数据转换成十六进制串，字符串中的每两个字符表示结果 `RAW` 中的一个字节。 |
| RAWTOHEX(rawvalue) | 将 `RAW` 类数值 `rawvalue` 转换为一个相应的十六进制表示的字符串。 `rawvalue` 中的每个字节都被转换为一个双字节的字符串。 |
| UTL_RAW.CAST_TO_RAW([VARCHAR2]) | 保持数据的存储内容不变，仅改变数据类型，将 `VARCHAR2` 转换为 `RAW` 类型。 |
| UTL_RAW.CAST_TO_VARCHAR2([RAW]) | 保持数据的存储内容不变，仅改变数据类型，将 `RAW` 类型转换为 `VARCHAR2` 类型。 |
| UTL_RAW.BIT_OR() UTL_RAW.BIT_AND() UTL_RAW.BIT_XOR() | 位操作。 |

## 示例

- 在 `test_raw` 表中声明 `RAW` 型数据，并向表中分别插入一条数据。

  ```sql
  obclient> CREATE TABLE test_raw (col1 RAW(10));
  Query OK, 0 rows affected

  obclient> INSERT INTO test_raw VALUES (UTL_RAW.CAST_TO_RAW('1234567890'));
  Query OK, 1 row affected

  obclient> SELECT UTL_RAW.CAST_TO_VARCHAR2(col1) FROM test_raw;
  +--------------------------------+
  | UTL_RAW.CAST_TO_VARCHAR2(COL1) |
  +--------------------------------+
  | 1234567890                     |
  +--------------------------------+
  1 row in set

  ```
 - 向 `raw_test01` 表中插入 2 条数据并使用函数转换。

  ```sql
  obclient> CREATE TABLE raw_test01 (id NUMBER, raw_date RAW(10));
  Query OK, 0 rows affected

  obclient> INSERT INTO raw_test01 VALUES  (1, HEXTORAW('ff'));
  Query OK, 1 row affected

  obclient> INSERT INTO raw_test01 VALUES  (2, UTL_RAW.CAST_TO_RAW('051'));
  Query OK, 1 row affected

  obclient> SELECT * FROM raw_test01;
  +------+----------+
  | ID   | RAW_DATE |
  +------+----------+
  |    1 | FF       |
  |    2 | 303531   |
  +------+----------+
  2 rows in set

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
