web-dev-qa-db-ja.com

OracleシステムがUnicodeまたはマルチバイト文字をサポートするように設定されているかどうかを確認するにはどうすればよいですか?

Oracleが複数の文字セットをサポートしていることは理解していますが、現在使用している11gシステムでその機能が有効になっているかどうかをどのように判断できますか?

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

データベースと国別文字セットが表示されます。データベースの文字セットは、CHAR列とVARCHAR2列のデータのエンコードを制御します。データベースがこれらの列でUnicodeをサポートしている場合、データベースの文字セットはAL32UTF8(またはまれにUTF8)である必要があります。国別文字セットは、NCHAR列とNVARCHAR2列のデータのエンコードを制御します。データベースの文字セットがUnicodeをサポートしていない場合、これらのデータ型の列にUnicodeデータを格納できる可能性がありますが、一般にシステムが複雑になります。国別の文字セットをサポートするには、アプリケーションを変更する必要があります。

23
Justin Cave

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;
0