Sorteringsbeteende för text (inklusive char
och varchar
samt text
typ) beror på aktuell sortering för din plats.
Se tidigare närbesläktade frågor:
- PostgreSQL-sortering
- https://stackoverflow.com/q/21006868/398670
Om du vill göra en förenklad sortering efter ASCII-värde, snarare än en korrekt lokaliserad sortering enligt dina lokala språkregler, kan du använda COLLATE
klausul
select *
from test
order by title COLLATE "C" ASC
eller ändra databassorteringen globalt (kräver dumpning och omladdning, eller fullständig omindexering). På mitt Fedora 19 Linux-system får jag följande resultat:
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 använder ditt operativsystems sorteringsstöd, så det är möjligt för resultaten att variera något från värd-OS till värd-OS. I synnerhet har åtminstone vissa versioner av Mac OS X avsevärt brutit unicode-sorteringshanteringen.