Trên Unix / Linux SE, một chuyên gia thân thiện đã giải thích rằng những gì bạn thấy là cách thích hợp để sắp xếp Unicode. Về cơ bản, tiêu chuẩn đang cố gắng sắp xếp:
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
Bây giờ nếu dấu cách cũng quan trọng như các chữ cái, thì việc sắp xếp không thể tách biệt các cách viết giống hệt nhau của Fred và John. Vì vậy, những gì sẽ xảy ra là nó được sắp xếp đầu tiên mà không có dấu cách. Sau đó, trong lần chuyển thứ hai, các chuỗi giống nhau không có khoảng trắng sẽ được sắp xếp. (Đây là một sự đơn giản hóa, thuật toán thực trông khá phức tạp, chỉ định khoảng trắng, dấu và các ký tự không in được ở nhiều mức độ ưu tiên khác nhau.)
Bạn có thể bỏ qua đối chiếu Unicode bằng cách cài đặt:
export LC_ALL=C
Hoặc trong Postgres bằng cách truyền sang mảng byte để sắp xếp:
order by name::bytea
Hoặc (từ câu trả lời của Lò nung) bằng cách chỉ định C
đối chiếu:
order by name collate "C"
Hoặc bằng cách thay đổi đối chiếu mặc định cho cột:
alter table products alter column name type text collate "C";