在过去,ORACLE 数据库将全球化支持称为国家语言支持(National Language Support, NLS),NLS 实际是全球化支持的一个子集。OceanBase 的 Oralce 租户兼容 ORACLE 数据库,继续沿用这个称呼。 NLS是使用特定字符集选择国家语言和存储数据的能力,用一序列NLS参数实现。

OceanBase 存储数据时使用 UTF8MB4 字符集,可以存储绝大部分语言的字符。但是在本地消息、货币、时间日期等区域化展示方面,OceanBase 当前版本只支持英语。客户端连接环境的 NLS_LANG 设置目前对OceanBase 连接没有影响。

关于地区支持

OceanBase 当前版本对地区只支持美国英语地区,默认值为 AMERICA 。默认的本地时间格式、日期格式、数字和货币格式都取决于该地区的设置。

OceanBase 当前版本对日期和时间格式只支持美国英语地区的日期和时间格式。默认的日期格式是:DD-MON-RR,默认的时间戳格式是:DD-MON-RR HH.MI.SSXFF AM 或 DD-MON-RR HH.MI.SSXFF AM TZR 。OceanBase 支持通过更改会话参数或者实例参数调整日期和时间格式。

关于日历格式

不同的国家使用不同的数值和货币约定格式。OceanBase 当前版本暂不支持货币格式设置,支持默认的数值分隔符是:., 。

关于语言排序和字符串查找

OceanBase 当前版本只支持按 BINARY 比较和排序字符串,不支持修改。

如果要以字节为单位计算字符串的长度,您需要知道在所使用的字符集中每个字符占多少个字节。

在单字节字符集中,字符串的字节数跟字符数是一致的;在多字节字符集中,一个字符会包含一到多个字节。特别是在变宽字符集中,很难根据字节长度计算字符数。以字节为单位计算列长称为字节语义,而以字符为单位计算列长称为字符语义

OceanBase 的 Oracle 租户默认使用字节语义。

关于 Unicode 和 SQL 国家字符数据类型

Unicode 是个编码系统,定义世界上大部分语言的字符。在 Unicode 中,每个字符都有一个唯一的编码,与平台、程序或语言无关。

在 OceanBase 的 Oracle 租户中,有两种方式存储 Unicode 字符:

  • 可以创建租户时指定字符集为 UTF8,这样您可以在 SQL 的字符类型(CHAR , VARCHAR2 , CLOB 和 LONG)数据中存储 UTF-8 编码的字符。

SQL 国家字符类型包括 NCHAR , NVARCHAR2 , 和 NCLOB(OceanBase 当前版本还不支持 NCLOB),它们也被称为 Unicode 数据类型,因为仅用于存储 Unicode 数据。

当声明一个列或变量类型为 NCHAR 或 NVARCHAR2 , 指定的长度就是它可以存储的最大的字符个数,不是字节数。长度语义设置不影响国家字符。如下示例所示: