NLS_LENGTH_SEMANTICS
デフォルトでは、文字データ型CHARおよびVARCHAR2は、文字単位ではなくバイト単位で 指定します。したがって、表定義でCHAR(20)と指定すると、文字データを格納するために 20バイトが割り当てられます。
データベース・キャラクタ・セットでシングルバイト文字コード体系が使用されている場合 は、文字数がバイト数と同じであるため、このような指定は適切に処理されます。データ ベース・キャラクタ・セットでマルチバイト文字コード体系が使用されている場合は、1文 パラメータ・タイプ
パラメータ・タイプパラメータ・タイプ
パラメータ・タイプ: 文字列 パラメータの有効範囲
パラメータの有効範囲パラメータの有効範囲
パラメータの有効範囲: 初期化パラメータ、ALTER SESSION、ALTER SYSTEM デフォルト値
デフォルト値デフォルト値
デフォルト値: FALSE 値の範囲値の範囲値の範囲
値の範囲: TRUE、FALSE
関連項目関連項目関連項目
関連項目: キャラクタ・セット変換中のデータ消失の詳細は、第10章
「キャラクタ・セットの移行」を参照してください。
パラメータ・タイプ パラメータ・タイプパラメータ・タイプ
パラメータ・タイプ: 文字列 パラメータの有効範囲
パラメータの有効範囲パラメータの有効範囲
パラメータの有効範囲: 動的、初期化パラメータ、ALTER SESSIONおよびALTER SYSTEM
デフォルト値 デフォルト値デフォルト値
デフォルト値: BYTE 値の範囲
値の範囲値の範囲
値の範囲: BYTE | CHAR
長さセマンティクス
字が1バイト以上で構成される場合があるため、バイト数は文字数とは異なります。した がって、特定の文字数に対して予測される最大バイト数を見込んで、列幅を慎重に選択する 必要があります。この問題は、列サイズの定義時にキャラクタ・セマンティクスに切り替え ることで回避できます。
NLS_LENGTH_SEMANTICSによって、CHAR、VARCHAR2およびLONGの各列をバイト・セ マンティクスまたはキャラクタ・セマンティクスのいずれかを使用して作成できます。
NCHAR、NVARCHAR2、CLOBおよびNCLOBの各列は、常に文字ベースです。既存の列は、
影響を受けません。
既存のアプリケーションとの互換性を維持するためには、バイト・セマンティクスを使用す る必要があります。
NLS_LENGTH_SEMANTICSは、SYSおよびSYSTEMの表には適用されません。データ・ディ クショナリでは、常にバイト・セマンティクスが使用されます。
関連項目関連項目関連項目 関連項目:
■ 2-11ページ「長さセマンティクス」
■ 長さセマンティクスの詳細は、『Oracle9iデータベース概要』を参照し てください。
4
言語ソート 言語ソート 言語ソート 言語ソート
この章では、Oracle環境での文字のソート方法について説明します。この章の内容は、次の とおりです。
■ Oracleのソート機能の概要
■ バイナリ・ソートの使用
■ 言語ソートの使用
■ 言語ソート機能
■ 言語索引の使用
■ 関数索引を使用した大/小文字区別なしの検索パフォーマンスの改善
■ 汎用ベース文字検索の実行
Oracleのソート機能の概要
Oracle のソート機能の概要 のソート機能の概要 のソート機能の概要 のソート機能の概要
ソート順序は言語によって異なります。さらに、同じアルファベットを使用している文化ま たは国の間でも、ワードのソート方法が異なる場合があります。たとえば、デンマーク語の 文字Æは、Zの後にきます。また、YとÜは同じ文字の変形とみなされます。
ソート順序には、大/小文字区別の有無を指定できます。ケースケースは、大文字であるか小文字ケースケース であるかの条件を指します。たとえば、ラテン・アルファベットのAは、小文字の絵文字a の大文字です。
ソート順序では、発音区別記号を無視するか考慮するかを指定できます。発音区別記号発音区別記号は、発音区別記号発音区別記号 文字または文字列の上または下にある記号で、それが付いていない場合の文字とは発音が異 なることを示します。たとえば、façadeの場合、セディラ(,)は発音区別記号です。セ ディラが付いている場合は、cの発音が変化します。
表音的なソート順序や、文字の外観に基づいたソート順序も指定できます。たとえば、東南 アジアの表意文字の場合は、画数に基づいたソート順序を指定できます。ソート上の一般的 な問題となるものに、結合文字があります。たとえば、伝統的なスペイン語のchは1つの 独立した文字であり、ソート順序ではcの後にきます。つまり、正しいソート順序は、
cerveza、colorado、cheremoyaのようになります。したがって、文字cは、次にくる文字が
hであるかどうかが確認されるまで、ソートされません。
Oracleには、次のタイプのソートが用意されています。
■ バイナリ・ソート
■ 単一言語ソート
■ 多言語ソート
単一言語に応じた正確なソートに加えて、多言語ISO規格(ISO-14651)に準拠したソート が実現できます。この規格は、複数言語を同時に処理するように設計されています。
バイナリ・ソートの使用 バイナリ・ソートの使用 バイナリ・ソートの使用 バイナリ・ソートの使用
文字データをソートする方法の1つは、文字コード体系によって定義された文字の数値に基 づいています。このようなソートをバイナリ・ソートバイナリ・ソートバイナリ・ソートと呼びます。バイナリ・ソート バイナリ・ソートは最も 高速なソート・タイプであり、ASCIIやEBCDICの規格では、文字A~Zを昇順の数値で 定義しているため、英語のアルファベットについては正しいソート結果が得られます。
他の言語で使用されている文字が存在すると、通常、バイナリ・ソートでは正しい結果が得 られません。たとえば、文字コード体系でÄの数値がBの数値より高い場合、昇順のORDER BY問合せでは、ABC、ABZ、BCD、ÄBCの順で文字列が戻ります。表意文字を使用するアジ ア言語の場合、通常、バイナリ・ソートに言語的な意味はありません。
言語ソートの使用 言語ソートの使用 言語ソートの使用 言語ソートの使用
文字のアルファベット順に一致するソート基準を得るには、文字コード体系内の数値に依存 せずに文字をソートする別のソート方法を使用する必要があります。この方法を言語ソート言語ソート言語ソート言語ソート と呼びます。言語ソートでは、各文字を、言語的に適切な文字順序を反映した数値に置換す ることによって、ソート操作を行います。
Oracleでは、単一言語ソートと多言語ソートの2種類の言語ソートを提供しています。
この項の内容は、次のとおりです。
■ 単一言語ソート
■ 多言語ソート
■ 多言語ソート・レベル
■ 言語ソートの例
単一言語ソート 単一言語ソート 単一言語ソート 単一言語ソート
単一言語ソートの場合、文字列は2つの手順で比較されます。最初の手順では、メジャー値 テーブルにある文字列全体のメジャー値が比較されます。通常、同じ外観の文字には、同じ メジャー値があります。第2の手順では、マイナー値テーブルにあるマイナー値が比較され ます。メジャー値とマイナー値はOracleによって定義されます。 Oracleでは、マイナー値が 異なる同じメジャー値を使用して、発音区別記号を持つ文字と大/小文字区別を定義しま す。
各メジャー・テーブル・エントリには、1文字のUnicodeコード・ポイントコード・ポイントとメジャー値がコード・ポイントコード・ポイント 含まれています。 Unicodeコード・ポイントは、1文字を表す16ビットのバイナリ値です。
注意注意注意
注意: ASCII規格では、大文字はすべて小文字の前にきます。逆に、
EBCDIC規格では、小文字はすべて大文字の前にきます。
言語ソートの使用
表4-1に、a、A、ä、Äおよびbのソートに使用するサンプルの値を示します。
多言語ソート 多言語ソート 多言語ソート 多言語ソート
Oracle9i には多言語ソートが用意されているため、複数言語のデータを1つのソートとして
ソートできます。この機能は、複雑なソート・ルールや多言語データベースを持つ地域また は言語に有効です。さらに、Oracle9i では、従来のリリースで定義されたすべてのソート順 序をサポートしています。
アジア諸国の言語データや多言語データに対しては、ISO 14651規格とUnicode 3.1規格に 基づいたソート・メカニズムが用意されています。漢字は、画数、ピンイン(中国語の発音 記号)または部首で順序付けされます。
また、多言語ソートでは、標準的な同値化や補助文字も処理できます。標準的な同値化標準的な同値化標準的な同値化標準的な同値化は、
文字間または文字列間での基本的な同値化です。たとえば、çはcと,の組合せと同じです。
補助文字補助文字補助文字
補助文字はUnicode 3.1でのユーザー定義文字または事前定義済みの文字であり、特定の コード範囲内の2つのコード・ポイントを必要とします。 1つの多言語ソートに最大110万 のコード・ポイントを定義できます。
たとえば、Oracle9iではフランス語の単一言語ソート(FRENCH)がサポートされています が、フランス語の多言語ソート(FRENCH_M)を指定できます。_Mは、多言語ソートに対す
るISO 14651規格を表します。このソート順では、GENERIC_Mソート順に基づき、発音区別
記号を右から左へとソートできます。したがって、表に多言語データが格納されている場合 は、多言語ソートの使用をお薦めします。表にフランス語のみが含まれている場合は、フラ ンス語の単一言語ソートを使用する方が、メモリー使用量が少ないため、パフォーマンスは 向上します。メモリー使用量が少ないのは、フランス語の単一言語ソートの方が、フランス 語の多言語ソートよりも定義されている文字が少ないためです。ソートの有効範囲とパ フォーマンスの間には、トレードオフがあります。
表表表
表 4-1 文字のサンプルとそのソートのメジャー値とマイナー値文字のサンプルとそのソートのメジャー値とマイナー値文字のサンプルとそのソートのメジャー値とマイナー値文字のサンプルとそのソートのメジャー値とマイナー値 絵文字
絵文字絵文字
絵文字 メジャー値メジャー値メジャー値メジャー値 マイナー値マイナー値マイナー値マイナー値
a 15 5
A 15 10
ä 15 15
Ä 15 20
b 20 5
関連項目 関連項目関連項目
関連項目: 5-2ページ「Unicodeの概要」