Hitachi

ノンストップデータベース HiRDB Version 10 システム運用ガイド(UNIX(R)用)


13.22.1 空白変換機能とは

データを比較するとき,全角の空白1文字と半角の空白2文字は異なるデータと認識されます。したがって,全角の空白1文字と半角の空白2文字が表データ中に混在していると,検索結果が不正になることがあります。

(例)

次に示すデータは異なるデータと認識されます。

[図データ]

なお,ここでいう全角空白とは次に示すコードのことです。半角空白2文字とは,X'2020'のことです。

注※ 文字コードがUnicode(UTF-8),Unicode(IVS対応UTF-8)又は中国語漢字コード(GB18030)の場合は,NCHAR及びNVARCHARを使用できません。

〈この項の構成〉

(1) 空白変換レベル

空白変換機能には三つのレベルがあり,次の表に示すように空白を変換します。

表13‒44 空白変換レベル

レベル

説明

レベル0

空白変換をしません。

レベル1

操作系SQLでの定数,埋込み変数,又は?パラメタのデータの空白,及びユティリティで格納するデータの空白を次のように変換します。

  • 文字列定数を各国文字列定数とみなした場合,半角空白2文字を全角空白1文字に変換します。なお,半角空白が1文字単独で現れる場合は変換しません。

  • 文字列定数を混在文字列定数とみなした場合,全角空白1文字を半角空白2文字に変換します。

  • 各国文字列型の列へのデータの格納時,及び各国文字列型の値式との比較時は,埋込み変数,又は?パラメタの半角空白2文字を全角空白1文字に変換します。なお,半角空白が1文字単独で現れる場合は変換しません。

  • 混在文字列型の列へのデータの格納時,及び混在文字列型の値式との比較時は,埋込み変数,又は?パラメタの全角空白1文字を半角空白2文字に変換します。

レベル3

空白変換レベル1の処理に加えて次の処理が加わります。

  • 各国文字列型の値式のデータを検索するときに,全角空白1文字を半角空白2文字に変換します。

レベル1の処理方式とレベル3の処理方式を次の図に示します。

図13‒93 レベル1の処理方式

[図データ]

図13‒94 レベル3の処理方式

[図データ]

(2) 注意事項

  1. 空白変換レベルを変更すると,変更の前後でUAPの検索結果が変わることがあります。UAPの検索結果を変えたくない場合は,空白変換レベルを変更しないでください。

  2. レベル3を指定してソートをした場合,HiRDBはソートの結果に対して空白変換をするため,期待した結果を得られないことがあります。

  3. レベル3を指定して各国文字データを検索した場合,レベル0又は1のときに比べて性能が劣化することがあります。例えば,NVARCHAR(2000)などのデータ長が長いデータを検索するときに性能が劣化します。これは,全角空白を半角空白に変換するオーバヘッドが発生するためです。

  4. クラスタキーの列へデータを格納する場合,空白変換によってユニークエラーとなることがあります。この場合,空白変換をしないでデータを格納するか,又は既存データの空白文字を統一してください。既存データの空白文字の統一方法については,「表中の空白文字の統一方法」を参照してください。

  5. 各国文字列の空白変換は,先頭から2文字単位で変換します。

  6. 空白変換レベルに1又は3を指定したときの注意事項を次に示します。

    • ハッシュ分割した表に対して,表分割ハッシュ関数を使用したUAPで格納先RDエリアを求める場合は,表分割ハッシュ関数の引数に空白変換レベルを指定してください。指定しないと表分割ハッシュ関数の結果が不正になることがあります。

    • キーレンジ分割(分割キーが各国文字データ又は混在文字データの場合)した表に対して,UAPでキーレンジ分割処理をしている場合は,分割キー値を空白変換関数で変換してください。変換しないとキーレンジ分割の結果が不正になることがあります。

    表分割ハッシュ関数,及び空白変換関数については,マニュアル「HiRDB UAP開発ガイド」を参照してください。