sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL felaktig sortering

Sorteringsbeteende för text (inklusive char och varchar samt text typ) beror på aktuell sortering för din plats.

Se tidigare närbesläktade frågor:

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

Om du vill göra en förenklad sortering efter ASCII-värde, snarare än en korrekt lokaliserad sortering enligt dina lokala språkregler, kan du använda COLLATE klausul

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

eller ändra databassorteringen globalt (kräver dumpning och omladdning, eller fullständig omindexering). På mitt Fedora 19 Linux-system får jag följande resultat:

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 använder ditt operativsystems sorteringsstöd, så det är möjligt för resultaten att variera något från värd-OS till värd-OS. I synnerhet har åtminstone vissa versioner av Mac OS X avsevärt brutit unicode-sorteringshanteringen.



  1. Visa (lista) MySQL-databaser på Linux via kommandoraden

  2. SQL Server, Hur ställer man in automatisk ökning efter att ha skapat en tabell utan dataförlust?

  3. Kan jag lösa detta med ren mysql? (sammanfogar på '' separerade värden i en kolumn)

  4. Vad du ska leta efter om din PostgreSQL-replikering släpar efter