照合順序
照合順序 (ソート順序ともいいます) は、文字セット内の文字の比較や順序付けを行うときに、文字が互いにどのように関係し合うかを定義します。
ある特定の言語にしたがってデータの順序付けを行う場合は、別の照合順序を使用するのが便利です。 例えば、リストをある特定の言語で通常見られる順序でリストすることができます。照合順序を使用して、ある文字 (例えば、a と A) を同等として扱うこともできます。照合順序は、以下のものを含むすべての比較で機能します。
- SBCS 文字データ (ビット・データを含む)
- 混合データの SBCS 部分
- Unicode データ (UTF-8、UCS-2、または UTF-16)
SBCS 照合順序は、256 バイトの表を使用してサポートされています。 この表では、それぞれのバイトが 1 つのコード・ポイントまたは SBCS コード・ページ内の文字に対応しています。照合順序は文字データに適用されるので、表には CCSID を関連付けておかなければなりません。照合順序表中のバイトは、各コード・ポイントとそのコード・ページ内の他のコード・ポイントとの対比に基づいて設定されています。例えば、文字 a と A を比較の際に同等として扱いたい場合には、照合順序表のこれらのコード・ポイントに対応するバイトには同じ値、すなわち、同じ重みが入ります。
UCS-2 照合順序は、マルチバイトの表を使用してサポートされています。 表内の一対のバイトが、UCS-2 コード・ページの 1 文字に対応します。 UCS-2 の数千ある文字の 1 つのサブセットだけが、代表して表に表されます。 比較して異なる文字だけが (おそらく、同じ区分内の他の文字も)、表に表されます。 照合順序表中のバイトは、それぞれの文字と UCS-2 内の他の文字との対比に基づいて設定されます。
照合順序表の複数のバイト (あるいは、UCS-2 の場合は一対のバイト) に同じ値が入っている場合、その照合順序は共用重みソート順序です。照合順序表中のすべてのバイト (あるいは、UCS-2 の場合は一対のバイト) が固有の値を持つ照合順序は、固有重み照合順序です。システムでは、多くの言語に対応する固有重みおよび共用重みの照合 順序が、オペレーティング・システムの一部として出荷されています。他の言語や要件に対応する照合順序が必要な場合には、表作成 (CRTTBL) コマンドを用いてそのソート順序を定義してください。
UTF-8 および UTF-16 照合順序サポートは、 ICU (International Components for Unicode) を使用してインプリメントされています。 ICU は Unicode をソートする標準 API です。 この API は正規化および非正規化データに対して同じ結果を生成し、 言語固有の規則に基づいてソートの順番を戻します。 IBM® i オペレーティング・システムは ICU 2.3.1、ICU 3.4、および ICU 4.0 照合順序をサポートしていますが、ICU 3.4 または ICU 4.0 を使用するようにしてください。 ICU 照合順序表 I34en_us (米国ロケール) は、I34fr_FR (フランス・ロケール) とはデータのソート方法が異なります。
ICU を使用する場合、LIKE 述部および LOCATE、POSITION、POSSTR、POSITION の各スカラー関数はサポートされません。
- EXCEPT または INTERSECT 操作
- 全選択の中の VALUES
- OLAP の指定
- 反復共通表式
- ORDER OF
- スカラー全選択 (スカラー副選択はサポートされています)
- 全外部結合
- GROUP BY の中の LOB、
- グループ化集合またはスーパー・グループ
- 副選択の中の ORDER BY または FETCH FIRST n ROWS 節
- CONTAINS または SCORE 関数
XMLAGG、XMLATTRIBUTES、XMLCOMMENT、XMLCONCAT、
XMLDOCUMENT、XMLELEMENT、XMLFOREST、XMLGROUP、
XMLNAMESPACES、XMLPI、XMLROW、または XMLTEXT 関数- グローバル変数、または
- 配列の参照
ICU 照合順序表は、一般には言語使用の観点からより正確な 結果を生成しますが、以下の状況が観察されています。
- ICU 照合順序表を使用する SQL ステートメントのパフォーマンスは、 一般に SBCS または UCS-2 のいずれかの照合順序表を使用した場合に比べて劣ります。 ただし、ICU 照合順序表とともに索引を作成して、パフォーマンスを改善することができます。 この場合、索引キー値には ICU の重み付けされた値が含まれ、 この値によってシステムの ICU サポートを呼び出す回数が非常に少なくて済みます。
- ICU 照合順序表を使用する索引に必要な記憶域は、 一般に SBCS または UCS-2 のいずれかの照合順序表を使用した場合に比べて優れています。 キー値は、キーを生成するために使用される SBCS データの長さの 3 倍、 およびキーを生成するために使用される DBCS データの長さの 6 倍までが可能です。
照合順序によってデータ自体が変わるわけではないことを覚えておいてください。 比較には、代わりにデータの重み付け表現が使用されます。SQL では、照合順序は CRTSQLxxx、STRSQL、および RUNSQLSTM コマンドで指定します。 SET OPTION ステートメントを使用して、組み込み SQL を含むプログラムのソース 内に照合順序を指定することができます。 指定された照合順序は、SQL ステートメントで実行されるすべての文字比較に適用されます。システムのデフォルトの照合順序は、文字の 16 進表示を使用する際 に生じる内部順序です。 これは、SRTSEQ(*HEX) を指定した場合の順序です。 バージョン 2 リリース 3 より前のプロダクト・リリースでプリコンパイルされたプログラムの場合、照合順序は *HEX です。
照合順序は、FOR BIT DATA 列やバイナリー・ストリング列には適用されません。
照合順序は、フィールド・プロシージャーのあるキー列が含まれる索引またはユニーク制約には使用できません。
SQL インターフェース | 指定 |
---|---|
組み込み SQL | 「SQL プログラムの作成」(CRTSQLxxx) コマンドの SRTSEQ パラメーター。SRTSEQ の値の設定に SET OPTION ステートメントも使用可能。 (CRTSQLxxx コマンドについて詳しくは、「組み込み SQL プログラミング」を参照してください。) |
SQL ステートメント実行 | SQL ステートメント実行 (RUNSQLSTM) コマンドの SRTSEQ パラメーター。 (RUNSQLSTM コマンドの詳細については、 「SQL プログラミング」を参照。) |
サーバー上の呼び出しレベル・インターフェース (CLI) | SQL_ATTR_JOB_SORT_SEQUENCE 環境変数 (CLI について詳しくは、「SQL 呼び出しレベル・インターフェース (ODBC)」を参照してください。) |
IBM IBM Developer Kit for Java™ を使用したサーバーの JDBC または SQLJ | job.sort.sequence プロパティー・オブジェクト (JDBC および SQLJ について詳しくは、「IBM Developer Kit for Java」を参照してください。) |
IBM i Access Family ODBC ドライバーを使用したクライアントの ODBC | ODBC セットアップでのソート・タイプ (ODBC の詳細については、「IBM i Access」を参照。) |
IBM Toolbox for Java を使用したクライアントの JDBC | JDBC セットアップでのソート順序表 (JDBC の詳細については、「IBM i Access」を参照。) (IBM Toolbox for Java について詳しくは、「IBM Toolbox for Java」を参照してください。) |
IBM i Access Family OLE DB Provider を使用したクライアントの OLE DB | ソート順序接続オブジェクト・プロパティー (OLE DB の詳細については、「IBM i Access」を参照。) |
IBM i Access FamilyADO .NET プロバイダーを使用しているクライアントの ADO .NET | 接続オブジェクト・プロパティー内の SortSequence (ADO .NET の詳細については、「IBM i Access」を参照。) |
CCSID の詳細については、IBM i Information Center のグローバリゼーション・セクションの 中の CCSID の処理トピックを参照してください。 照合順序、およびシステムに付属している照合順序について詳しくは、IBM i Information Centerにある DB2® および SQL 照合順序のトピックを参照してください。