それで、私は最近、照合がpostgresで大きな問題であり、多くのコメントがOSX /ロケールサポートを「壊れた」と呼んでいることを認識しましたが、それは私を啓発していません. この質問の目的のために、照合のテーブル/列のデフォルトの側面を無視し、明示的に指定しています。
- 私のラップトップはpostgres 9.2.4のosxです
- 私のサーバーはpostgres 9.1.9のubuntuです
両方に共通:
# show lc_collate ;
en_US.UTF-8
# show lc_ctype ;
en_US.UTF-8
私のラップトップで:
select ',' < '-' collate "en_US.UTF-8" as result;
true
現在、私のサーバーには照合「en_US.UTF-8」はありませんが、「en_US.utf8」はあります(同じ動作を期待していますが、これは同じではないことを認識しています)
select ',' < '-' collate "en_US.utf8" as result;
false
だから、ここで私はびっくりしています。「C」オーダーは常に(両方のマシンで)「,」は「-」より小さいと言い、私の脳はこれに同意します。
どのutf8実装が正しいですか? ほとんどの場合、osxでレベル付けされた「壊れた」という告発しか見つけることができなかったので、誰かが私に役立つ定義を指摘できれば. だから私は、ハイフンの前にカンマの順序があると思って一生間違っていたのではないかと心配していますが、テキストやユニコードなどのかなり信頼できるアービターを入力してください。ubuntuサーバーで次の結果が得られます:
>>> print u',' < u'-', ',' < '-'
True True
したがって、この照合の概念は、osx サーバーよりも ubuntu サーバーの方が壊れているように感じています。しかし、ala「照合の作成」から「en_US.UTF-8」照合を作成するための「適切な」照合がないため、パリティを作成する方法、またはどの答え(真/偽)について迷っています正しい参照として使用する必要があります。(結局のところ、アスキー文字とは何かのアスキーオーダーを個人的に支持することに加えて)。
つまり、一言で言えば、 en_US.UTF-8 の適切な答えはどれですか?