如何判断我的 Oracle 系统是否设置为支持 Unicode或多字节字符?

问题描述 投票:0回答:3

我知道Oracle支持多种字符集,但是如何确定我当前工作的11g系统是否启用了该功能?

oracle unicode plsql oracle11g
3个回答
30
投票
SELECT *
  FROM v$nls_parameters
 WHERE parameter LIKE '%CHARACTERSET';

将向您显示数据库和国家字符集。数据库字符集控制

CHAR
VARCHAR2
列中数据的编码。如果数据库在这些列中支持 Unicode,则数据库字符集应为 AL32UTF8(或在极少数情况下为 UTF8)。国家字符集控制
NCHAR
NVARCHAR2
列中数据的编码。如果数据库字符集不支持 Unicode,您可以将 Unicode 数据存储在具有这些数据类型的列中,但这通常会增加系统的复杂性 - 应用程序可能必须更改以支持国家字符集。


4
投票

Unicode 是一种字符编码系统,定义了世界上大多数口语中的每个字符,Oracle 数据库对 Unicode 的支持:

Character Set   Supported in RDBMS Release  Unicode Encoding
AL24UTFFSS      7.2 - 8i                    UTF-8
UTF8            8.0 - 11g                   UTF-8
UTFE            8.0 - 11g                   UTF-EBCDIC
AL32UTF8        9i - 11g                    UTF-8
AL16UTF16       9i - 11g                    UTF-16

要确保您的数据库是 Unicode,请检查“NLS_CHARACTERSET”参数的值,它应该是上面列表中的 AL32UTF8 或 AL16UTF16。

SQL>
SQL> SELECT * FROM v$nls_parameters WHERE parameter='NLS_CHARACTERSET';

PARAMETER                   VALUE               CON_ID
--------------------------- ------------------- ----------
NLS_CHARACTERSET            AL32UTF8            0

要更改Parameter的值,请进行Fullback,因为ALTER DATABASE语句无法回滚,并且使用以下语句:

SHUTDOWN IMMEDIATE
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET AL32UTF8;
SHUTDOWN IMMEDIATE;
STARTUP;

0
投票

Rajesh 的回答几乎是准确的。我对 AL24UTFFSS 字符集很感兴趣。旧的 Oracle 7.2 文档中有说明:

UTF2 的字符集名称是 AL24UTFFSS。 UTF2 之间的转换 以及此版本中提供的其他现有字符集 甲骨文服务器。 UTF2 和单字节字符集之间的转换 通过内部号码匹配机制完成;转换 UTF2 和多字节字符集之间的转换是通过转换完成的 函数和表格。

客户应该知道 AL24UTFFSS 现在已得到官方支持 新的字符集。由于UTF2的编码方案非常相似 对一些现有的字符集,对现有产品没有重大影响 预计。

但是 Rajesh 说:AL24UTFFSS 是 UTF8。 我知道 UCS2 是 UTF16(即 AL16UTF16)的过时术语。 就我个人而言,我不熟悉“UTF2”术语,但“AL24”前缀暗示某些 3 字节字符集。它看起来不像 UTF8。

© www.soinside.com 2019 - 2024. All rights reserved.