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

时间:2012-03-14 14:00:24

标签: oracle unicode plsql oracle11g

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

2 个答案:

答案 0 :(得分:21)

SELECT *
  FROM v$nls_parameters
 WHERE parameter LIKE '%CHARACTERSET';

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

答案 1 :(得分:1)

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

要更改参数的值,请将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;