Oracleデータベースに、すべての可能なUTF8文字を適切に格納してもらいたい。 NLS_CHARSETがAL32UTF8に設定されている場合、それで十分ですか。または、UTf8文字を適切に格納するために、CHARとVARCHARではなくNCHARとNVARCHARを使用していることを確認する必要がありますか?
良い質問。簡単な答えを示します。
Oracleは、異なるデータ型とパラメータを使用して、2つの文字セットを同時にサポートします。 「通常の」データベース全体の文字セットと「国の」文字セット。
現在、「通常」の文字セットは、VARCHAR2
、CHAR
、およびCLOB
データの格納方法に影響を与えます。 「国別」の文字セットは、NVARCHAR2
、NCHAR
、およびNCLOB
データの格納方法に影響します。
これらは、データベースの作成時に指示されます。例えば:
CREATE DATABASE ....
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
..... BLAH;
これらは、DBをチェックインすることで確認できます。例えば:
SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET';
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET WE8MSWIN1252
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL>
NLS_CHARACTERSET
はCHAR
/VARCHAR2
用、NLS_NCHAR_CHARACTERSET
はNCHAR
/NVARCHAR2
用です。
通常の文字セットがUTF%である場合、奇妙な国際化の要件がない限り、通常はN%
データ型から離れても安全です。その場合は、質問を自由に編集してください。