Unix / Linux SEでは、フレンドリーな専門家が、あなたが見ているものがUnicodeをソートする適切な方法であると説明しました。基本的に、標準は並べ替えを試みています:
di Silva Fred di Silva Fred
di Silva John diSilva Fred
diSilva Fred disílva Fred
diSilva John -> di Silva John
disílva Fred diSilva John
disílva John disílva John
スペースが文字と同じくらい重要である場合、ソートはフレッドとジョンのさまざまな同一のスペルを分離できませんでした。つまり、最初にスペースなしでソートされます。次に、2番目のパスで、空白なしで同じ文字列がソートされます。 (これは単純化したものであり、実際のアルゴリズムはかなり複雑に見え、空白、アクセント、および印刷不可能な文字にさまざまなレベルの優先順位を割り当てます。)
次のように設定することで、Unicode照合をバイパスできます。
export LC_ALL=C
または、Postgresでソートのためにバイト配列にキャストする:
order by name::bytea
または(キルンの回答から)C
を指定します 照合:
order by name collate "C"
または、列のデフォルトの照合を変更することによって:
alter table products alter column name type text collate "C";