Sortierverhalten für Text (einschließlich char
und varchar
sowie den text
Typ) hängt von der aktuellen Sortierung ab Ihres Gebietsschemas.
Siehe vorherige eng verwandte Fragen:
- PostgreSQL-Sortierung
- https://stackoverflow.com/q/21006868/398670
Wenn Sie eine vereinfachte Sortierung nach ASCII-Wert anstelle einer korrekt lokalisierten Sortierung nach Ihren lokalen Sprachregeln durchführen möchten, können Sie COLLATE
verwenden Klausel
select *
from test
order by title COLLATE "C" ASC
oder ändern Sie die Datenbanksortierung global (erfordert Dump und Neuladen oder vollständige Neuindizierung). Auf meinem Fedora 19 Linux-System erhalte ich die folgenden Ergebnisse:
regress=> SHOW lc_collate;
lc_collate
-------------
en_US.UTF-8
(1 row)
regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#'))
SELECT title FROM v ORDER BY title ASC;
title
-------
#
a
#a
a#
a#a
(5 rows)
regress=> WITH v(title) AS (VALUES ('#a'), ('a'), ('#'), ('a#a'), ('a#'))
SELECT title FROM v ORDER BY title COLLATE "C" ASC;
title
-------
#
#a
a
a#
a#a
(5 rows)
PostgreSQL verwendet die Sortierungsunterstützung Ihres Betriebssystems, daher können die Ergebnisse von Host-Betriebssystem zu Host-Betriebssystem leicht variieren. Insbesondere haben zumindest einige Versionen von Mac OS X die Verarbeitung von Unicode-Sortierungen erheblich beeinträchtigt.