Unicode データベースのデータ・タイプ

Db2® でサポートされるすべてのデータ・タイプは、Unicode データベースでもサポートされます。 特に、GRAPHIC ストリング・データが Unicode データベースでサポートされており、UCS-2 エンコードで格納されます。 SBCS クライアントを含む各クライアントは、Unicode データベースへの接続時に UCS-2 エンコードの GRAPHIC ストリング・データ・タイプを処理できます。

Unicode データベースは、MBCS データベースに似ています。このデータベースでは文字ストリング・データがバイト数で測定されます。 文字ストリング・データを UTF-8 エンコードで処理する場合、それぞれの文字を 1 バイトと見なすことはできません。 マルチバイト UTF-8 エンコードの場合、各 ASCII 文字は 1 バイトですが、 非 ASCII 文字はそれぞれ 2 から 4 バイトになります。 CHAR フィールドを定義するときには、このことを考慮するようにします。 ASCII 文字と非 ASCII 文字の比率に応じて、サイズが n バイトの CHAR フィールドには、 n/4 文字から n 文字までの任意のものを指定できます。

さらに、GRAPHIC ストリング UCS-2 データ・タイプに対して文字ストリング UTF-8 エンコードを使うことも、 全体のストレージ要件に影響します。 文字の大多数が ASCII で、非 ASCII 文字が少ししか含まれない場合、 ストレージ要件は 1 文字当たり 1 バイトに近づくため、 UTF-8 データを格納したほうが良いかもしれません。 ただし、文字の大多数が非 ASCII 文字で、3 バイトか 4 バイトの UTF-8 シーケンスで展開される場合 (例えば表意文字) は、UCS-2 GRAPHIC ストリング形式を選択する方が良いでしょう。それは、すべての 3 バイトの UTF-8 シーケンスが 1 つの 16 ビット UCS-2 文字に、各 4 バイトの UTF-8 シーケンスは 2 つの 16 ビット UCS-2 文字になるためです。

SQL CHAR データ・タイプは、ユーザー・プログラムに おける C 言語の char データ・タイプによってサポートされています。 SQL GRAPHIC データ・タイプは、ユーザー・プログラムの sqldbchar によってサポートされています。 ただし Unicode データベースでは、sqldbchar データは常にビッグ・エンディアン (バイト数の大きい順番) 形式であるということに注意してください。 アプリケーション・プログラムを Unicode データベースに接続すると、文字ストリング・データは Db2 によってアプリケーション・コード・ページと UTF-8 との間で変換され、GRAPHIC ストリング・データはアプリケーション GRAPHIC コード・ページと UCS-2 との間で変換されます。

Unicode データベースからデータを取り出して、 SBCS、EUC、または Unicode コード・ページを使用しないアプリケーションに渡すと、 定義済みの置換文字が、GRAPHIC 列に埋め込まれている各ブランクに戻されます。 Db2 は、固定長の Unicode GRAPHIC 列を、ASCII ブランク (U+0020) (純粋な DBCS コード・ページに同等のものがない文字) で埋めます。 その結果として、GRAPHIC 列の埋め込みに使用される各 ASCII ブランクは、 検索時に置換文字に変換されます。 同様に、DATE、TIME、または TIMESTAMP ストリングでも、純粋な DBCS に同等なものがないすべての SBCS 文字も、 Unicode データベースから検索されて SBCS、EUC、または Unicode コード・ページを使用しないアプリケーションに渡されるときに、置換文字に変換されます。

注: バージョン 8 より前では、グラフィック・ストリング・データと文字ストリング・データには互換性がありませんでした。 バージョン 8 以降は、GRAPHIC データおよび文字データは交換可能なものとして使用できます。 Db2の以前の動作に依存するアプリケーションとの互換性を提供するために、レジストリー変数 DB2GRAPHICUNICODESERVER が導入されました。 このデフォルト値は OFF です。 この変数の値を ON に変更すると、Db2 は以前のバージョンの動作が使えるようになります。 さらに、 Db2 サーバーは、クライアント上で実行されている Db2 のバージョンを検査し、クライアントが Db2 UDB バージョン 7 を実行している場合は、 Db2 Universal Database バージョン 7 の動作をシミュレートします。