明示的 XMLSERIALIZE によって XML データを取り出す際のエンコード方式のシナリオ

明示的に XMLSERIALIZE 関数を呼び出して XML データを取り出すときに、 ターゲットのエンコード方式とアプリケーション・コード・ページは、データ変換、切り捨て、および内部エンコード方式に影響する可能性があります。

以下の例は、次の相互作用を示しています。

XML データを XMLSERIALIZE 関数で指定されているタイプに変換する場合は、 入出力データが Unicode データであるため、データを喪失することはありません。 XMLSERIALIZE 操作の結果をアプリケーション・データ・タイプに変換する際に、 データを喪失する可能性があります。 データを喪失すると、SQL 警告が出されます。

明示的に XMLSERIALIZE を使用してデータを取り出す場合、以下の 2 つの時点で、 データの切り捨てが発生する可能性があります。
  • XMLSERIALIZE 関数で指定されているタイプへの変換時

    この切り捨ては、 XMLSERIALIZE 関数で出力データ・タイプに指定したサイズが小さすぎることにより発生する可能性があります。 データが切り捨てられると、SQL エラーになります。

  • XMLSERIALIZE 操作結果のアプリケーション・データ・タイプへの変換時

    この切り捨ては、ホスト変数に指定したサイズが小さすぎることにより発生する可能性があります。 データが切り捨てられると、SQL 警告が出されます。

以下の例は、出力エンコード方式への変換時に文書のサイズが大きくなったために発生した 切り捨てについて示しています。

Java™アプリケーションには、シナリオ1とシナリオ2のみが適用されます。なぜなら、Javaアプリケーションのアプリケーションコードページは常にUnicodeだからです。

シナリオ 1

エンコードのソース
ターゲットのデータ・エンコード UTF-8 Unicode
ターゲットのアプリケーション・データ・タイプ バイナリー
アプリケーション・コード・ページ 適用外
出力例:
SELECT XMLSERIALIZE(XMLCOL AS BLOB(1M) INCLUDING XMLDECLARATION) FROM T1

文字変換: なし。

データ損失: なし。

拡張による切り捨て: なし。

テキスト XML データの内部エンコード方式: 以下の XML 宣言がデータの接頭部になります。
<?xml version="1.0" encoding="UTF-8" ?>

シナリオ 2

エンコードのソース
ターゲットのデータ・エンコード UTF-16 Unicode
ターゲットのアプリケーション・データ・タイプ Graphic
アプリケーション・コード・ページ CCSID 1208
出力例:
SELECT XMLSERIALIZE(XMLCOL AS DBCLOB(1M) EXCLUDING XMLDECLARATION) FROM T1

文字変換: データは UTF-8 から UTF-16 に変換されます。

データ損失: なし。

拡張による切り捨て: UTF-8 から UTF-16 への変換時に、 拡張による切り捨てが発生することがあります。

テキスト XML データの内部エンコード方式: EXCLUDING XMLDECLARATION が指定されているので、なし。 INCLUDING XMLDECLARATION が指定されている場合は、内部エンコード方式は UTF-16 の代わりに UTF-8 を示します。 この場合、エンコード方式の名前に依存しているアプリケーション・プロセスで XML データを構文解析できなくなる可能性があります。

シナリオ 3

エンコードのソース
ターゲットのデータ・エンコード ISO-8859-1 データ
ターゲットのアプリケーション・データ・タイプ 文字
アプリケーション・コード・ページ 819
出力例:
SELECT XMLSERIALIZE(XMLCOL AS CLOB(1M) EXCLUDING XMLDECLARATION) FROM T1

文字変換: データは UTF-8 から CCSID 819 に変換されます。

データ損失: データ損失は起こる可能性があります。 CCSID 819 で表すことができない UTF-8 文字があります。 文字を CCSID 819 で表せない場合、Db2 データベース・マネージャーは、出力に置換文字を挿入して、警告を出します。

拡張による切り捨て: なし。

テキスト XML データの内部エンコード方式: EXCLUDING XMLDECLARATION が指定されているので、なし。 INCLUDING XMLDECLARATION が指定されている場合は、データベース・マネージャーは ISO-8859-1 の代わりに UTF-8 の内部エンコード方式を追加します。 この場合、エンコード方式の名前に依存しているアプリケーション・プロセスで XML データを構文解析できなくなる可能性があります。

シナリオ 4

エンコードのソース
ターゲットのデータ・エンコード Windows-31J データ (Shift_JIS のスーパーセット)
ターゲットのアプリケーション・データ・タイプ Graphic
アプリケーション・コード・ページ 943
出力例:
SELECT XMLSERIALIZE(XMLCOL AS CLOB(1M) EXCLUDING XMLDECLARATION) FROM T1

文字変換: データは UTF-8 から CCSID 943 に変換されます。

データ損失: データ損失は起こる可能性があります。 CCSID 943 で表すことができない UTF-8 文字があります。 文字を CCSID 943 で表せない場合、 データベース・マネージャーは、出力に置換文字を挿入して、警告を出します。

拡張による切り捨て: UTF-8 から CCSID 943 への変換時に、 拡張による切り捨てが発生することがあります。

テキスト XML データの内部エンコード方式: EXCLUDING XMLDECLARATION が指定されているので、なし。 INCLUDING XMLDECLARATION が指定されている場合は、内部エンコード方式は Windows-31J の代わりに UTF-8 を示します。 この場合、エンコード方式の名前に依存しているアプリケーション・プロセスで XML データを構文解析できなくなる可能性があります。