我知道Oracle支持多个字符集,但是如何确定当前的11g系统在哪里工作,是否启用了该功能?如何判断我的Oracle系统是否设置为支持Unicode或多字节字符?
8
A
回答
17
SELECT *
FROM v$nls_parameters
WHERE parameter LIKE '%CHARACTERSET';
会告诉你数据库和国家字符集。数据库字符集控制CHAR
和VARCHAR2
列中数据的编码。如果数据库在这些列中支持Unicode,那么数据库字符集应该是AL32UTF8(或在少数情况下是UTF8)。国家字符集控制NCHAR
和NVARCHAR2
列中的数据编码。如果数据库字符集不支持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;