言語対応型照合
言語認識照合は、 Db2® データベースが非 Unicode データベース用に使用する重み表に基づいています。 この重み表が Unicode に変換され、Unicode データに適用されます。
ストリングは、各文字に対して Unicode 文字のサブセットから単一の重みが提供されて順序付けされます。 この重み表は、Db2 データベースの非 Unicode 照合表に由来しています。 重み表にない文字は、バイナリー順にソートされます。 結果として、各単語は言語上正しい順序に近い形でソートされます。
ストリングの内部表記を使用して、サブストリング・マッチングが行われます。 これにより、2 つのサブストリングがバイト単位で同一の場合のみ、一致していると見なされ、言語上の規則は考慮されません。
言語認識照合で使用される文字の重みについて詳しくは、 システムおよび言語認識照合表を参照してください。
- 利点
- 重み表のコード・ポイントの言語ベースの順序付けを使用します。
- 照合がとても高速です (非 Unicode の照合および IDENTITY 照合と比較して)。
- 文字タイプとグラフィック・タイプの順序付けが同じです。 1
- 非 Unicode データベースから Unicode データベースへのマイグレーションで、照合が変更されることはありません。
1 文字ストリングでは、x'EE8080' から x'EFBFBF' (両端を含む)(U+E000 から U+FFFF) の範囲の文字は、x'F0908080' から x'F48FBFBF' (U+10000 から U+10FFFF) の補足文字の後にソートされます。 しかし特定のプラットフォームでは、x'EE8080' から x'EFBFBF' までの範囲の文字の前に、補助文字がソートされます。 影響を受けるプラットフォームは、 Linux® AMD 64、 HP-UX IA64、SUN SPARC64、SUN AMD x64です。
影響を受ける全プラットフォームにおいて、アプリケーションは、order by 節の前で文字ストリングをグラフィック・ストリングとしてキャストすることで、グラフィック・ストリングとしてのソート順を得られます。
以下に例を示します。
db2 "create db utf using codeset UTF-8 collate using SYSTEM_819_US" db2 "connect to utf" db2 "create table t2 ( c1 int, c2 varchar(200),c3 vargraphic(200))" db2 "insert into t2 values (1, U&'\E000', U&'\E000' )" db2 "insert into t2 values (2, U&'\FFFF', U&'\FFFF' )" db2 "insert into t2 values (3, U&'\+10FFFE', U&'\+10FFFE' )" db2 "insert into t2 values (4, U&'\+10FFFF', U&'\+10FFFF' )"
db2 "select hex(c2) from t2 order by c2"
前述の照会による、文字列 c2 の正しいソート順の結果は、次のとおりです。
- F48FBFBE
- F48FBFBF
- EE8080
- EFBFBF
影響を受けるプラットフォームにおける逆のソート順は、次のとおりです。
- EE8080
- EFBFBF
- F48FBFBE
- F48FBFBF
グラフィックとしてのソート順を得るための回避策は、次のとおりです。
db2 'select hex(c2) from t2 order by graphic (c2)'
- F48FBFBE
- F48FBFBF
- EE8080
- EFBFBF
- 欠点
- 重み表の 256 コード・ポイントだけが扱われます。 他のコード・ポイントはバイナリー順にソートされます。
- 元の非 Unicode 重み表は MBCS 文字を適切に処理しませんでした。 その表が Unicode に移動されると、各表の SBCS 部分だけが使用されました。
- こうした照合は、結合アクセントを処理しません。
- サブストリング・マッチングは言語を考慮に入れません。
言語対応型照合が適しているのは、適度な順序付けが必要とされるものの、ロケールに依存する UCA ベースの照合に必要な追加処理は許容できないという場合です。
例
言語認識照合を使用するデータベースは、コマンド CREATE DATABASE TESTDB COLLATE USING SYSTEM_912_CZ
を使用して作成されました。
SELECT WORD FROM TESTDATA ORDER BY WORD
WORD
----------
cena
chleb
c◌̌as
C◌̌ech
čas
Čech
hlava
holub
jaro
Jana
Jaroslav
- 大文字、小文字、およびアクセント付き文字は、相互にグループ化されています。
- 結合アクセントが付いている文字は、アクセントが付いていない文字とともにグループ化されています。
- 大/小文字およびアクセントの違いは意味があるものとして扱われています。 例えば、Jana は jaro と Jaroslav の間に順序付けされています。
- chleb という単語は、文字 c で始める他の単語とともに間違ってグループ化されています。
SELECT WORD FROM TESTDATA WHERE WORD LIKE 'c%'
WORD
----------
cena
chleb
c◌̌as
- 先頭が cではないにもかかわらず、 cいくらでも という単語が選択されています。 これは文字 リッチ で始まります。
- chleb という単語では、連字 ch は文字 c と言語的には一致しませんが選択されています。