Di Unix/Linux SE, seorang ahli yang ramah menjelaskan bahwa apa yang Anda lihat adalah cara yang tepat untuk mengurutkan Unicode. Pada dasarnya, standar mencoba mengurutkan:
di Silva Fred di Silva Fred
di Silva John diSilva Fred
diSilva Fred disílva Fred
diSilva John -> di Silva John
disílva Fred diSilva John
disílva John disílva John
Sekarang jika spasi sama pentingnya dengan huruf, jenis itu tidak dapat memisahkan berbagai ejaan identik dari Fred dan John. Jadi yang terjadi adalah pertama-tama mengurutkan tanpa spasi. Kemudian pada pass kedua, string yang sama tanpa spasi diurutkan. (Ini adalah penyederhanaan, algoritme sebenarnya terlihat cukup rumit, menetapkan spasi putih, aksen, dan karakter yang tidak dapat dicetak di berbagai tingkat prioritas.)
Anda dapat mengabaikan susunan Unicode dengan menyetel:
export LC_ALL=C
Atau di Postgres dengan casting ke array byte untuk menyortir:
order by name::bytea
Atau (dari jawaban Kiln) dengan menentukan C
susunan:
order by name collate "C"
Atau dengan mengubah susunan default untuk kolom:
alter table products alter column name type text collate "C";