da_DK.utf8 ロケールで作成された PostgreSQL 8.4 データベースがあります。
dbname=> show lc_collate;
lc_collate
------------
da_DK.utf8
(1 row)
文字が異なる列で注文するテーブルから何かを選択すると、IMO で奇妙な動作が発生します。結果を並べ替えるとき、PostgreSQL は値の前にあるダッシュを無視します。たとえば、次のようになります。
select name from mytable order by name asc;
次のようなものを返す場合があります
name
----------------
Ad...
Ae...
Ag...
- Ak....
At....
ダッシュ接頭辞は無視されているようです。
注文時に列を latin1 に変換することで、この問題を解決できます。
select name from mytable order by convert_to(name, 'latin1') asc;
次のように期待される結果が得られます。
name
----------------
- Ak....
Ad...
Ae...
Ag...
At....
ダッシュ接頭辞がデフォルトで無視されるのはなぜですか? その行動を変えることはできますか?