Sorter adfærd for tekst (inklusive char
og varchar
samt text
type) afhænger af den aktuelle sortering af dit land.
Se tidligere nært relaterede spørgsmål:
- PostgreSQL-sortering
- https://stackoverflow.com/q/21006868/398670
Hvis du ønsker at udføre en forenklet sortering efter ASCII-værdi i stedet for en korrekt lokaliseret sortering efter dine lokale sprogregler, kan du bruge COLLATE
klausul
select *
from test
order by title COLLATE "C" ASC
eller ændre databasesorteringen globalt (kræver dump og genindlæsning eller fuld genindeks). På mit Fedora 19 Linux-system får jeg følgende resultater:
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 bruger dit operativsystems sorteringsunderstøttelse, så det er muligt for resultaterne at variere lidt fra værts-OS til værts-OS. Især har i det mindste nogle versioner af Mac OS X brudt unicode-sorteringshåndteringen markant.