6 JSONデータの文字セットおよび文字エンコーディング
JSONデータでは常にUnicode文字セットが使用されます。この点で、JSONデータの方がXMLデータより簡単に使用できます。これは、JSONデータ交換フォーマットの重要な部分です(RFC 4627)。Oracle Databaseで処理されるJSONデータでは、必要な文字セットの変換が自動的に行われます。
Oracle Databaseでは、JSONデータの処理時にUTF-8を内部で使用します(解析、問合せ)。このような処理に入力されるデータまたはこのような処理から出力されるデータをUTF-8とは異なる文字セットにする必要がある場合は、それに応じた文字セット変換が実行されます。
文字セット変換はパフォーマンスに影響する可能性があります。また、情報が失われる可能性もあります。入力データをUTF-8に変換する操作では情報が失われる可能性は高くありませんが、出力文字セットで表すことができない文字の場合、出力への変換の結果として情報の損失が発生する可能性があります。
JSONデータがUnicodeのようにデータベースに格納されている場合、格納または取得時に文字セットの変換は必要ありません。これは、データベースの文字セットがAL32UTF8 (Unicode UTF-8)である場合、またはJSONデータが文字セットAL16UTF16を含むCLOBインスタンス内に格納されている場合です。可能であれば、データベース文字セットとしてAL32UTF8を使用することをお薦めします。
データベース文字セットに関係なく、データ型BLOB
を使用して格納されているJSONデータでは、格納または取得時に文字セットの変換はありません。JSONデータは、AL32UTF8、AL16UTF16またはAL16UTF16LEとしてデータ型BLOB
を使用して格納できます。
SQL/JSONファンクションまたはPL/SQLメソッドを使用してJSONデータを変換し、データ型BLOB
を使用して変換の結果を戻す場合、結果はAL32UTF8としてエンコードされます。これは、入力BLOB
データは別のUnicodeエンコーディングを使用している場合にも当てはまります。
たとえば、ファンクションjson_query
を使用してBLOB
入力からJSONデータを抽出し、BLOB
として結果を戻す場合は、AL32UTF8を使用して戻されます。
SQL/JSONファンクションまたはPL/SQLメソッドのアプリケーションでVARCHAR2
またはCLOB
の戻りデータ型を指定し、およびデータベース文字セットがUnicodeでないる場合に、文字セットの変換で情報の損失が発生することがあります。最終的にBLOB
として作成されている場合でも、入力JSONデータがBLOB
インスタンスに格納された場合、一部がVARCHAR2
またはCLOB
に一時的に変更されると、変換後のBLOB
データに情報が損失する可能性があります。
関連項目
関連項目:
-
Unicodeの詳細は、Unicode.orgを参照してください
-
JSONデータ交換フォーマットについては、『IETF RFC4627』および『ECMA 404』を参照してください
-
データベースでの様々な文字セットの使用の詳細は、Oracle Database Migration Assistant for Unicodeガイドを参照してください。
-
データベースでの文字セット変換の詳細は、Oracle Databaseグローバリゼーション・サポート・ガイドを参照してください。
親トピック: JSONデータの格納および管理