Zachowanie sortowania tekstu (w tym char
i varchar
jak również text
typ) zależy od aktualnego sortowania Twojego regionu.
Zobacz poprzednie, ściśle powiązane pytania:
- Sortowanie PostgreSQL
- https://stackoverflow.com/q/21006868/398670
Jeśli chcesz wykonać uproszczone sortowanie według wartości ASCII, zamiast poprawnie zlokalizowanego sortowania zgodnie z lokalnymi zasadami języka, możesz użyć COLLATE
klauzula
select *
from test
order by title COLLATE "C" ASC
lub globalnie zmień sortowanie bazy danych (wymaga zrzutu i ponownego załadowania lub pełnego ponownego indeksowania). W moim systemie Linux Fedora 19 otrzymuję następujące wyniki:
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 korzysta z obsługi sortowania Twojego systemu operacyjnego, więc możliwe jest, że wyniki będą się nieznacznie różnić w zależności od hosta. W szczególności, przynajmniej niektóre wersje Mac OS X znacząco zepsuły obsługę sortowania Unicode.