2012-03-14 36 views

回答

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

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

1

Unicode是一个字符编码系统,它定义了每个角色在大多数口头语言的世界,支持Unicode的Oracle数据库:

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 

更改参数的值,请采取后卫,因为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;