グローバルなアプリケーションでのUnicodeの使用
Unicodeデータは挿入および取得できます。データはデータベースおよびクライアント・プログラム間で透過的に変換されるため、クライアント・プログラムはデータベース文字セットや各国文字セットに依存していません。
関連情報:
-
Unicodeを使用したSQLおよびPL/SQLプログラミングの詳細は、Oracle Databaseグローバリゼーション・サポート・ガイドを参照してください。
-
Unicodeを使用したプログラミングの一般情報は、Oracle Databaseグローバリゼーション・サポート・ガイドを参照してください。
SQLおよびPL/SQLでのUnicode文字列リテラルの表現
SQLまたはPL/SQLでは、次の例に示すようにUnicode文字列リテラルを表現する方法が3つあります。
-
文字列'
例:
N'résumé'。制限事項: 「文字セット変換時のデータ消失の回避」を参照してください。
-
NCHR(number)
SQLファンクションNCHRは、各国語文字セットでバイナリが数値に相当する文字を返します。返される文字のデータ型は、NVARCHAR2です。
例:
NCHR(36)は、デフォルトの各国語文字セットAL16UTF16で$を表します。制限事項: NCHR(number)の値の移植性は、同じ各国語文字セットを使用するアプリケーションに限定されます。
-
UNISTR('string')
SQLファンクションUNISTRは、文字列を各国語文字セットに変換します。
移植性とデータの保存のために、Oracleでは、文字列にはASCII文字とUnicodeエンコーディング値のみを含めることをお薦めします。Unicodeエンコーディング値は、形式\xxxxで、xxxxはUCS-2エンコーディング形式の文字コード値の16進数値です。
例:
UNISTR('G\0061ry')は'Gary'を表します。ASCII文字は、データベース文字セットに変換されてから、各国語文字セットに変換されます。Unicodeエンコーディング値は、各国語文字セットに直接変換されます。
関連情報:
-
Unicode文字列リテラルの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
NCHRファンクションの詳細は、Oracle Database SQL言語リファレンスを参照してください。
-
UNISTRファンクションの詳細は、Oracle Database SQL言語リファレンスを参照してください。
文字セット変換時のデータ消失の回避
SQLまたはPL/SQL文の一部として、リテラル(接頭辞N付きと接頭辞なし)は、文の残りと同じ文字セットでエンコードされます。クライアント側では、クライアント文字セットで文がエンコードされます。これは、NLS_LANGパラメータによって決定されます。サーバー側では、データベース文字セットでエンコードされます。
SQLまたはPL/SQL文がクライアントからデータベースに送信されると、文字セットはそれに応じて変換されます。データベース文字セットにテキスト・リテラルで使用されるすべての文字が含まれていない場合、データはこの変換で消失します。データベース文字セットから独立するように設計されているため、NCHAR文字列リテラルはCHARテキスト・リテラルよりも脆弱です。
互換性のないデータベース文字セットへの変換時のデータ消失を回避するために、NCHARリテラル置換機能をアクティブ化できます。詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。