6

私は 2 つの Postgres 9.1 インスタンスを持っています。1 つは OS X 上の Postgres.app 経由でインストールされたローカル、もう 1 つは Heroku 上のリモートです。lc_collate両方のマシンにあることを確認しましたen_US.UTF-8が、まだ 2 つのマシン間で異なる動作が見られます。

私のローカル インスタンスでは、SELECT 'i' > 'N'が返されますがt、リモートでは が返されますf。すでに両方のシステムをチェックlc_*したことを考えると、私が見ている違いは何を説明していますか?

4

1 に答える 1

10

Unicode の観点からは、大文字と小文字の順序はカスタマイズです。http://www.unicode.org/reports/tr10からの抜粋:

ケース注文。辞書や著者によっては、小文字の前に大文字を照合するものもあれば、その逆を使用するものもあるため、好みをカスタマイズできる必要があります。デンマークのように、場合によっては政府によって命令されることがあります。多くの場合、それは単なるカスタマイズまたはユーザー設定です。

Mac OS X では、Heroku で使用されている OS とは単に大文字と小文字の順序が異なります。Mac OS X の場合:

$ LC_CTYPE=en_US.UTF-8 sort << EOF
> i
> N
> EOF

生成:

ニー
_

Ubuntu 12.04 でまったく同じコマンドと同じデータを実行すると、次の結果が生成されます。

私は
N

これは、照合に OS を使用するという事実を除いて、PostgreSQL とは関係がないため、異なる OS 間のこれらの不幸な不一致はデータベースに影響を与えます。

PostgreSQL 10 と ICU

バージョン 10 以降、PostgreSQL は、ICU でコンパイルされたサーバーに対して、ICU ライブラリによって提供される照合を使用する場合あります。これらの照合は、オペレーティング システム間で一貫してソートできます。

于 2012-11-13T23:37:23.690 に答える