Mengurutkan perilaku untuk teks (termasuk char
dan varchar
serta text
type) tergantung pada kolasi saat ini lokal Anda.
Lihat pertanyaan terkait sebelumnya:
- Urutan PostgreSQL
- https://stackoverflow.com/q/21006868/398670
Jika Anda ingin melakukan pengurutan sederhana berdasarkan nilai ASCII, daripada pengurutan yang dilokalkan dengan benar mengikuti aturan bahasa lokal Anda, Anda dapat menggunakan COLLATE
klausa
select *
from test
order by title COLLATE "C" ASC
atau ubah susunan basis data secara global (memerlukan dump dan reload, atau pengindeksan ulang penuh). Pada sistem Linux Fedora 19 saya, saya mendapatkan hasil sebagai berikut:
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 menggunakan dukungan susunan sistem operasi Anda, jadi mungkin saja hasilnya sedikit berbeda dari OS host ke OS host. Secara khusus, setidaknya beberapa versi Mac OS X telah secara signifikan merusak penanganan susunan unicode.