基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
字符集
更新时间:2026-07-15 22:01:31
字符集是由程序语言 (PL) 处理和存储在数据库中的所有字符数据所依赖的基础。字符集由一系列字符代码组成,其中每个字符都通过一系列字节唯一表示。字符集为字符数据的存储和交换提供了必要的编码规则。
OceanBase 数据库提供了对不同类型字符集的支持,包括数据库字符集和国家字符集。PL 通过这些字符集来处理字符数据。
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版仅提供 MySQL 模式。
数据库字符集
数据库字符集定义了 PL 存储源代码文本以及 CHAR、VARCHAR2、CLOB 和 LONG 数据类型的字符值时所使用的编码规则。
数据库字符集可以是单字节的,每个字符对应一个唯一的字节,也可以是多字节的,字符可能映射为一个、两个、三个或四个字节的变长序列。不同的字符集对于单个字符所允许的最大字节数是有限制的。
每种数据库字符集都至少包含以下基本字符类别:
拉丁字母:A 到 Z 和 a 到 z
小数位数:0 到 9
标点符号(见下表)
空格字符:空格、制表符、换行符和回车符
仅包含基本字符的 PL 源代码可以在任意数据库字符集下存储和编译。而包含非基本字符的源代码则只能在支持相应字符的数据库中进行存储和编译。
数据库字符集的标点字符如下所列:
| 符号 | 名称 |
|---|---|
| ( | 左括号 |
| ) | 右括号 |
| < | 左尖括号 |
| > | 右尖括号 |
| + | 加号 |
| - | 连字符或减号 |
| * | 星号 |
| / | 斜线号 |
| = | 等号 |
| , | 逗号 |
| ; | 分号 |
| : | 冒号 |
| . | 句号 |
| ! | 感叹号 |
| ? | 问号 |
| ' | 撇号或单引号 |
| " | 引号或双引号 |
| @ | At 符号 |
| % | 百分号 |
| # | 井号 |
| $ | 美元符号 |
| _ | 下划线 |
| | | 竖线 |
国家字符集
PL 使用国家字符集来处理 NCHAR、NVARCHAR2 和 NCLOB 数据类型的字符值。这些字符集专门为存储和表示国际化字符数据而设计。
示例
使用默认字符集:
OceanBase 数据库通常会有一个默认的字符集,这个字符集是在数据库级别设置的。所有 PL 代码中的字符串字面量和字符变量都将自动使用这个默认字符集。例如:
DECLARE v_message VARCHAR2(100); BEGIN v_message := 'Hello, World!'; -- 使用默认字符集 -- 其他逻辑... END; /在这段 PL/SQL 代码中,变量
v_message的存储和处理将采用数据库默认的字符集。在需要的时候使用国家字符集:
如果需要处理支持多语言字符集的数据,可以使用国家字符集类型
NCHAR,NVARCHAR2,NCLOB。这些类型在 PL 中的使用与标准字符类型相似,但它们使用数据库定义的国家字符集。DECLARE v_nmessage NVARCHAR2(100); BEGIN v_nmessage := N'こんにちは、世界!'; -- 使用国家字符集 -- 其他逻辑... END; /这里,
v_nmessage变量将使用国家字符集来处理 Unicode 字符。字符集转换:
如果需要在 PL 中转换字符集,可以使用转换函数如
TO_CHAR和TO_NCHAR等。DECLARE v_message VARCHAR2(100); v_nmessage NVARCHAR2(100); BEGIN v_message := 'Hello, World!'; v_nmessage := TO_NCHAR(v_message); -- 转换为国家字符集 -- 其他逻辑... END; /在这个例子中,
v_message变量中的字符串被转换为国家字符集,并存储在v_nmessage中。