Oracleが複数の文字セットをサポートしていることは理解していますが、現在使用している11gシステムでその機能が有効になっているかどうかをどのように判断できますか?
SELECT *
FROM v$nls_parameters
WHERE parameter LIKE '%CHARACTERSET';
データベースと国別文字セットが表示されます。データベースの文字セットは、CHAR
列とVARCHAR2
列のデータのエンコードを制御します。データベースがこれらの列でUnicodeをサポートしている場合、データベースの文字セットはAL32UTF8(またはまれにUTF8)である必要があります。国別文字セットは、NCHAR
列とNVARCHAR2
列のデータのエンコードを制御します。データベースの文字セットがUnicodeをサポートしていない場合、これらのデータ型の列にUnicodeデータを格納できる可能性がありますが、一般にシステムが複雑になります。国別の文字セットをサポートするには、アプリケーションを変更する必要があります。
Unicodeは、世界中のほとんどの話し言葉ですべての文字を定義する文字エンコードシステムです。OracleDatabaseでの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
パラメータの値を変更するには、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;