Sorteergedrag voor tekst (inclusief char
en varchar
evenals de text
type) is afhankelijk van de huidige sortering van uw land.
Zie eerdere nauw verwante vragen:
- PostgreSQL-sortering
- https://stackoverflow.com/q/21006868/398670
Als u een simplistische sortering op ASCII-waarde wilt uitvoeren in plaats van een correct gelokaliseerde sortering volgens uw lokale taalregels, kunt u de COLLATE
gebruiken clausule
select *
from test
order by title COLLATE "C" ASC
of verander de databasesortering globaal (vereist dump en herladen, of volledige herindexering). Op mijn Fedora 19 Linux-systeem krijg ik de volgende resultaten:
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 gebruikt de sorteerondersteuning van uw besturingssysteem, dus het is mogelijk dat de resultaten enigszins verschillen van host-besturingssysteem tot host-besturingssysteem. In het bijzonder hebben ten minste sommige versies van Mac OS X de verwerking van unicode-sortering aanzienlijk verbroken.