9

Python のスクリプトが機能しなかったので、問題を次のように縮小しました。

PostgreSQL 9.1で試しました:

SELECT 'P 0' < 'P! '
f

Python 2.7.3 では:

>>> 'P 0' < 'P! '
True

PostgreSQL' 'よりも低くないのはなぜですか? '!'何が起こっている?

4

2 に答える 2

7

PostgreSQL は、文字列の比較にロケールの照合規則を使用しています。Python は、照合に別のロケール (おそらく「C」) を使用しています。

LC_COLLATEデータベースが何であるか ( から) と\l+psqlPython のランタイム環境が何であるかを知らずに、これ以上言うことは困難です。データベースのロケールとシェルlocaleコマンドの出力を表示してみてください。

ロケールに関する PostgreSQL のドキュメントを参照してください。

たとえば、次のように比較対照します。

-- results may vary depending on your OS/libc
SELECT 'P 0' < 'P! ' COLLATE "C"; -- returns true
SELECT 'P 0' < 'P! ' COLLATE "en_GB"; -- returns false
于 2012-11-23T14:02:37.307 に答える
3

文字列比較規則が 2 つの異なる言語またはシステムで同じであると想定することはできません。無数の規則があります。数字のように明確に定義されていません。同等性が最もよく定義されていますが、それでも違いがあります (末尾のスペースが無視される、大文字と小文字が区別されないなど)。等しくない文字列の特定の順序付けは、ポータブルの領域をはるかに超えています。

于 2012-11-23T13:55:46.130 に答える