照合順序 (コレーション)

文字列の比較・並べ替えの規則。言語や文化圏によって異なるソート順を定義する。

照合順序 (コレーション) とは、文字列の比較や並べ替えに使用される規則の集合です。同じ文字でも言語や文化圏によってソート順が異なるため、国際化対応のシステムでは正しいコレーション設定が不可欠です。たとえばドイツ語では「ö」は「o」の後に来ますが、スウェーデン語では「z」の後に配置されます。

データベースでは、テーブルやカラムごとにコレーションを指定できます。MySQL の utf8mb4_unicode_ci は大文字小文字を区別しない比較を行い、utf8mb4_bin はバイナリ比較を行います。コレーションの選択を誤ると、検索結果の漏れやソート順の不具合が発生します。たとえば utf8mb4_bin では「A」と「a」が別の文字として扱われるため、ユーザー名の検索で大文字小文字の違いにより見つからないケースが起こり得ます。データベース国際化の書籍で詳しく学べます。

日本語のソートは特に複雑です。ひらがな・カタカナの同一視 (「あ」と「ア」)、濁点・半濁点の扱い (「は」「ば」「ぱ」の順序)、漢字の読み順 (音読み・訓読みのどちらで並べるか) など、多くの規則が絡み合います。Unicode の CLDR (Common Locale Data Repository) がこれらの規則を標準化しており、ICU ライブラリを通じて各プログラミング言語から利用できます。

JavaScript では Intl.Collator を使ってロケールに応じた文字列比較が可能です。new Intl.Collator('ja').compare('あ', 'ア') のように使用し、日本語の自然な並び順を実現できます。単純な String.localeCompare() でも同様の機能を利用できますが、大量のデータをソートする場合は Intl.Collator のインスタンスを再利用するほうがパフォーマンスに優れます。

文字数カウントの観点では、コレーションは文字の等価性に影響します。「は」と「ば」を同一視するかどうか、全角数字「1」と半角数字「1」を同じとみなすかどうかは、コレーション設定によって変わります。テキスト検索やフィルタリングの精度は、適切なコレーション選択に大きく依存します。国際化プログラミングの書籍も参考になります。