我知道Oracle支持多个字符集,但是如何确定我工作的当前11g系统是否启用了该功能?
答案 0 :(得分:21)
SELECT *
FROM v$nls_parameters
WHERE parameter LIKE '%CHARACTERSET';
将显示数据库和国家字符集。数据库字符集控制CHAR
和VARCHAR2
列中的数据编码。如果数据库在这些列中支持Unicode,则数据库字符集应为AL32UTF8(在极少数情况下为UTF8)。国家字符集控制NCHAR
和NVARCHAR2
列中的数据编码。如果数据库字符集不支持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;