PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL falsche Sortierung

Sortierverhalten für Text (einschließlich char und varchar sowie den text Typ) hängt von der aktuellen Sortierung ab Ihres Gebietsschemas.

Siehe vorherige eng verwandte Fragen:

  • PostgreSQL-Sortierung
  • https://stackoverflow.com/q/21006868/398670

Wenn Sie eine vereinfachte Sortierung nach ASCII-Wert anstelle einer korrekt lokalisierten Sortierung nach Ihren lokalen Sprachregeln durchführen möchten, können Sie COLLATE verwenden Klausel

select * 
from test
order by title COLLATE "C" ASC

oder ändern Sie die Datenbanksortierung global (erfordert Dump und Neuladen oder vollständige Neuindizierung). Auf meinem Fedora 19 Linux-System erhalte ich die folgenden Ergebnisse:

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 verwendet die Sortierungsunterstützung Ihres Betriebssystems, daher können die Ergebnisse von Host-Betriebssystem zu Host-Betriebssystem leicht variieren. Insbesondere haben zumindest einige Versionen von Mac OS X die Verarbeitung von Unicode-Sortierungen erheblich beeinträchtigt.