Oracle Database 内での言語データの
ソート
オラクル・テクニカル・ホワイト・ペーパー
2003
年
9
月
Oracle Database 内での言語データのソート
概要 ...................................................................................................................... 3
ソートのルールの世界 ...................................................................................... 4
西ヨーロッパの言語..................................................................................... 4
アジアの表意文字................................................................................... 5
ISO/IEC 14651 − INTERNATIONAL STRING ORDERING............................. 7
Oracle Database 内のソート............................................................................... 7
バイナリ・ソート......................................................................................... 8
単一言語ソート............................................................................................. 9
多言語ソート............................................................................................... 10
言語ソートのパラメータ........................................................................... 12
言語索引の使用........................................................................................... 17
言語索引使用の要件............................................................................. 18
大文字/小文字を区別しない検索.............................................................. 19
GENERIC_BASELETTER ソート........................................................ 20
言語ソートのカスタマイズ....................................................................... 23
まとめ ................................................................................................................ 24
Oracle Database 内での言語データのソート
2
Oracle Corporation 発行「Sorting Your Linguistic Data inside an Oracle Database」の翻訳版です。
Oracle Database 内での言語データのソート
概要
文字列のソートは、大変複雑な操作ですが、ユーザーの目には、その複雑さが分
からないことがよくあります。言語が異なれば、ソートのルールも異なります。
アルファベットの文字順にソートする言語もあれば、文字の画数でソートする言
語もあります。また、単語の発音によってソート順が決まる言語もあります。
文字のアクセント記号の扱いも言語によって異なります。
日常的な英語でも、ソートは簡単ではありません。英語の辞書を見ると、単語の
順に関しては、大文字と小文字が区別されていません。電話帳で名前を探してい
ると、たとえば、接頭辞の Mac と Mc が同じグループに入っているように、異な
る単語が同じ扱いであることに気付きます。
1 つ以上の言語からのデータをソートする必要がある場合、ソートはさらに複雑
になります。ある文字が 1 つの言語では文字
の後にソートされ、別の言語では
文字 a の前にソートされる場合は、どのように処理すればよいのでしょうか?
このホワイト・ペーパーでは、テキスト・リストが特定の言語においてソートさ
れたと見なされる場合に、テキスト・リストの文化的な意味からの要求要素の順
序を表わすために、言語ソートまたは照合という用語を使用します。言語のネイ
ティブ・スピーカーは、この順に基づき、他の要素に対して相対的に、リストの
要素を見つけることを当然のこととして期待します。たとえば、英語を話すユー
ザーは、英語の単語が並べられたリストで、B で始まる単語は、A で始まる単語
全部の後にあり、C で始まる単語の前にあるべきであると考えます。
ユーザーが慣れている言語の順序でソートされていないデータが提示された場合、
情報の検索は難しく、時間のかかる作業になります。
Oracle9i Database 以降、多言語でデータを検索し、ソートする必要のある顧客の要
求に応えるために、バイナリ・ソート、言語ソートの適用範囲が拡張され、新た
な多言語ソートが導入されました。このホワイト・ペーパーでは言語ソートの基
本的な概念を概略し、ソート・プロパティが異なる言語の照合順に与える影響を
例で示し、Oracle Database 内でデータをソートする方法をどのようにしてカスタ
マイズするかを説明します。
Oracle Database 内での言語データのソート
3
Oracle Corporation 発行「Sorting Your Linguistic Data inside an Oracle Database」の翻訳版です。
ソートのルールの世界
前述の項では、文化が要求する順序でデータをソートすることに伴う複雑さに触
れました。このセクションでは、すべての書体(たとえば、ラテン文字、ギリシ
ア文字、キリル文字など)には固有の順序があり、書体には、サポートする様々
な言語に対して、多数の競合する順序を持つものがあるということを詳しく説明
します。
西ヨーロッパの言語
ドイツ語では、ß は 1 つの文字ですが、配列のためには、2 つの s、つまり ss とし
て扱われます。ドイツ語を話す人々は、ü、ä、ö をそれぞれ ue、ae、oe と同等の
ものとして取り扱うことに慣れています。この 3 つの文字は、母音ペアと同じ順
でソートされます。
スペイン語では伝統的に、ch、ll、
n
を独立した文字として扱い、それぞれ c、l、
n の後に配置します。たとえば、次のスペイン語の単語は、現在の並び順にソー
トされます。
cabalmente、caballa、cantina、caña、clamar、curador、chácara
最近、この伝統的なスペイン語のソート方法が近代的なスペイン語のソートに置
き換えられ、ch と ll の特別なステータスがなくなりました。
デンマークのアルファベットでは 3 つの追加文字 æ、ø、å は、
の後にソートさ
れます。また、文字の組み合わせ aa をアルファベットの最後に、å の後に配置す
る独立した文字として扱い、ü と y をその文字の変形と見なします。これらの理由
により、都市名 Zürich、Aarfit、Årbus は、都市のリストで Zyrardow の後に表示さ
れます。
フランス語ではアクセント記号が付いた母音は、まず、基本的なソート順の観点
から、アクセント記号のない母音のように扱われます。アクセント記号を考慮せ
ずにテキストをソートした後、さらに各母音セットの中で、アクセントなし、揚
音アクセント、抑音アクセント、曲折アクセント、ウムラウトの順になるように
ソートされます。アクセント記号付きの母音は右から左に評価されますが、アク
セント記号なしの基本文字は左から右に考慮されるため、ソートはさらに複雑に
なり、フランス語ソートを使用して、2 つの文字列を照合する場合、Èdit は Edít
の前になります。
アクセント記号付きの文字は、言語によって、また同一言語の中でさえ意味が異
なり、別の複雑さがあります。数ヶ国語をサポートする Unicode のような多国語
のコード体系を扱う場合、これらの言語が、同じ文字に対して相反するアルファ
ベットのルールを含んでいる可能性があるため、混乱が生じます。たとえば、文
字 ä(ウムラウト付き)は、ドイツ語では、b の前にソートされますが、スウェー
デン語では、
の後にソートされます。このように、ソートするテキストが多数
の言語に属する場合、すべての言語の観点から見て、正しくソートすることは不
可能です。
Oracle Database 内での言語データのソート
4
Oracle Corporation 発行「Sorting Your Linguistic Data inside an Oracle Database」の翻訳版です。
アジアの表意文字
これまで述べたように、言語の間には文化的な期待値の差があります。前述の例
は、同じラテン語の書体を使用する西ヨーロッパの言語だけを取り上げたもので
す。アルファベットの 26 から 40 文字の処理が、かなりの問題であるとすると、
アジアの表意文字の処理は、気が遠くなるようなタスクだと言えます。中国語だ
けでも 4 万以上の文字があります。簡体字(中国とシンガポールで使用される)
中国語と繁体字(台湾、香港およびマカオで使用される)中国語の書体の間でも、
ソートのルールは異なります。
漢字のソートに使用される最も一般的な照合方法の例を、次に示します。
画数
− 漢字をソートする最も一般的な方法。漢字は、部首(基本的な要素)と 0
または複数の構成要素で形成されます。部首と構成要素は両方とも、字画で構成
されます。漢字によって、画数は異なります。同じ画数の漢字は、部首によって
さらにソートされます。
次の例に、3 つの漢字が、どのように、画数に基づいて配列されるかを示します。
串(画数: 7、部首: 丨)< 吟(画数: 7、部首: 口)< 壑(画数: 17、部首: 土)
ただし、簡体字と繁体字の間で、特定の漢字の画数が異なる場合があります。し
たがって、2 つの字体を処理するために、2 つの異なったソート・アルゴリズムを
使用することが一般的です。
次に、草という漢字を例に、2 つの字体の画数がどのように数えられるかを示し
ます。
簡体字中国語 繁体字中国語 画数
部首
− ほとんどの中国語辞書ではこの配列があります。これは画数による配列に
似ていますが、部首による配列が画数よりも優先されます。これは漢字をソート
する、より伝統的な方法ですが、特定の漢字の正確な部首を直観的に見つけるこ
とができない可能性があるため、中国語のネイティブ・スピーカーにとってさえ、
重荷になることがあります。部首による配列というのは、部首の画数による配列
です。同じ順位の部首を持つ字の場合、字の画数を使用します。
Oracle Database 内での言語データのソート
5
Oracle Corporation 発行「Sorting Your Linguistic Data inside an Oracle Database」の翻訳版です。
评论0