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 コード・ページを使用しないアプリケーションに渡されるときに、置換文字に変換されます。