web-dev-qa-db-ja.com

PostgreSQLの「照合」における「-x-icu」の意味は何ですか?

私はこのクエリを持っていました:

SELECT * FROM table ORDER BY label ASC;

ラベルは英語ではないため、正しい順序で並べ替えられていません( "ö"で始まるラベルは最後/最後にありませんでした)。

したがって、私は試しました:

SELECT * FROM table ORDER BY label COLLATE "sv-SE" ASC;
SELECT * FROM table ORDER BY label COLLATE "sv_SE" ASC;

これらは、それらの照合が存在しないことについてエラーを出し、私を困惑させました。

たくさんの検索をした後、私はやるべきことを見つけました:

SELECT * FROM pg_collation;

それはそれがそうであることになっていることを明らかにしました:

sv-SE-x-icu

その識別子を使用したときに機能しましたが、「-x-icu」のものには何がありますか?それは何についてですか?標準の「language_location」形式だけに依存することはできないので、標準のロケール識別子をいじる必要があるのは嫌です。

3
Tadhg Mocniak

ドキュメント 23.2。照合順序のサポート/ 23.2.2.2.2。ICU照合順序 は次のように述べています:

ICUによって提供される照合順序は、BCP 47言語タグ形式の名前でSQL環境で作成され、libcロケールと区別するために「私用」拡張-x-icuが追加されます。

ICUは " nicodeの国際コンポーネント "であり、ホームページによれば、次のとおりです。

ICUは成熟した広く使用されているC/C++およびJavaライブラリは、ソフトウェアアプリケーションにUnicodeおよびグローバリゼーションサポートを提供します。ICUは広く移植可能であり、アプリケーションにすべてのプラットフォームで、C/C++とJavaソフトウェアの間で同じ結果が得られます。

ICUは、商用ソフトウェアと他のオープンソースまたはフリーソフトウェアの両方での使用に適した、制限のないオープンソースライセンスの下でリリースされます。

Unicodeはソフトウェアではなく仕様であるため、長年にわたって各ベンダーが独自に実装しているため、照合で作業する人が評価するほどの一貫性はありません。 ICUプロジェクトは、幸いにも、ますます多くのベンダーによって実装されており、Unicodeのサポートと一貫性を向上させています。可能な場合は、ICU照合は、ICU以外の照合よりも良い選択です。

4
Solomon Rutzky