Ubuntu 16.04でPostgresql 9.6を実行しています。照合順序はen_ZA.UTF-8です。 Postgresが文字列を比較する方法に戸惑っています。
test=> select 'b' > 'B';
?column?
----------
f
test=> select 'ba' > 'B';
?column?
----------
t
test=> select 'b' = 'B';
?column?
----------
f
test=> select 'ba' > 'C';
?column?
----------
f
2番目のクエリに対する応答は、私には意味がありません。
これが、ロケールがソート順を定義する方法です。文字列が同じである場合、明らかに大文字がタイブレーカーとして機能します。それらはソートされますafter同等の小文字。ただし、「ba」は依然として「B」の後にソートされます(「BA」は「b」の後にソートされます)。
照合ルールなしの結果と比較します。
SELECT 'b' > 'B'
, 'ba' > 'B'
, 'ba' > 'C'
, 'b' > 'B' COLLATE "C"
, 'ba' > 'B' COLLATE "C"
, 'ba' > 'C' COLLATE "C";
?column? | ?column? | ?column? | ?column? | ?column? | ?column? ----------+----------+----------+----------+----------+---------- f | t | f | t | t | t
(現在の照合設定German_Germany.1252
はen_ZA.UTF-8
と同じように動作します。)