Chování řazení pro text (včetně char
a varchar
stejně jako text
typ) závisí na aktuálním řazení vašeho národního prostředí.
Viz předchozí úzce související otázky:
- PostgreSQL řazení
- https://stackoverflow.com/q/21006868/398670
Pokud chcete provést zjednodušené řazení podle hodnoty ASCII, spíše než správně lokalizované řazení podle místních jazykových pravidel, můžete použít COLLATE
doložka
select *
from test
order by title COLLATE "C" ASC
nebo globálně změnit řazení databáze (vyžaduje výpis a opětovné načtení nebo úplné přeindexování). Na mém systému Fedora 19 Linux dostávám následující výsledky:
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 používá podporu řazení vašeho operačního systému, takže je možné, že se výsledky budou mírně lišit od hostitelského OS k hostitelskému OS. Zejména alespoň některé verze systému Mac OS X výrazně porušily práci s řazením unicode.