PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Nieprawidłowe sortowanie/sortowanie/kolejność ze spacjami w Postgresql 9.4

W systemie Unix/Linux SE przyjazny ekspert wyjaśnił, że to, co widzisz, jest właściwym sposobem sortowania Unicode. Zasadniczo standard próbuje posortować:

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

Skoro spacje były tak samo ważne jak litery, sortowanie nie mogło oddzielić różnych identycznych pisowni Freda i Johna. Więc dzieje się tak, że najpierw sortuje bez spacji. Następnie w drugim przebiegu sortowane są ciągi, które są takie same bez spacji. (To uproszczenie, prawdziwy algorytm wygląda na dość skomplikowany, przypisując odstępy, akcenty i znaki niedrukowalne różne poziomy pierwszeństwa).

Możesz pominąć sortowanie Unicode, ustawiając:

export LC_ALL=C

Lub w Postgresie, rzutując na tablicę bajtów w celu sortowania:

order by name::bytea

Lub (z odpowiedzi Kilna), określając C zestawienie:

order by name collate "C"

Lub zmieniając domyślne sortowanie kolumny:

alter table products alter column name type text collate "C";



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kompresja tekstu w PostgreSQL

  2. Przechowywanie zaszyfrowanych danych w Postgres

  3. Zamiast LIKE i ~, dlaczego tylko SIMILAR TO działa podczas dopasowywania wyrażeń regularnych z alternatywami

  4. PostgreSQL:Dlaczego psql nie może połączyć się z serwerem?

  5. Postgresql DROP TABLE nie działa