我知道Oracle支持多种字符集,但是如何确定我当前工作的11g系统是否启用了该功能?
SELECT *
FROM v$nls_parameters
WHERE parameter LIKE '%CHARACTERSET';
将向您显示数据库和国家字符集。数据库字符集控制
CHAR
和 VARCHAR2
列中数据的编码。如果数据库在这些列中支持 Unicode,则数据库字符集应为 AL32UTF8(或在极少数情况下为 UTF8)。国家字符集控制 NCHAR
和 NVARCHAR2
列中数据的编码。如果数据库字符集不支持 Unicode,您可以将 Unicode 数据存储在具有这些数据类型的列中,但这通常会增加系统的复杂性 - 应用程序可能必须更改以支持国家字符集。
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;
Rajesh 的回答几乎是准确的。我对 AL24UTFFSS 字符集很感兴趣。旧的 Oracle 7.2 文档中有说明:
UTF2 的字符集名称是 AL24UTFFSS。 UTF2 之间的转换 以及此版本中提供的其他现有字符集 甲骨文服务器。 UTF2 和单字节字符集之间的转换 通过内部号码匹配机制完成;转换 UTF2 和多字节字符集之间的转换是通过转换完成的 函数和表格。
客户应该知道 AL24UTFFSS 现在已得到官方支持 新的字符集。由于UTF2的编码方案非常相似 对一些现有的字符集,对现有产品没有重大影响 预计。
但是 Rajesh 说:AL24UTFFSS 是 UTF8。 我知道 UCS2 是 UTF16(即 AL16UTF16)的过时术语。 就我个人而言,我不熟悉“UTF2”术语,但“AL24”前缀暗示某些 3 字节字符集。它看起来不像 UTF8。