sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL forkert sortering

Sorter adfærd for tekst (inklusive char og varchar samt text type) afhænger af den aktuelle sortering af dit land.

Se tidligere nært relaterede spørgsmål:

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

Hvis du ønsker at udføre en forenklet sortering efter ASCII-værdi i stedet for en korrekt lokaliseret sortering efter dine lokale sprogregler, kan du bruge COLLATE klausul

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

eller ændre databasesorteringen globalt (kræver dump og genindlæsning eller fuld genindeks). På mit Fedora 19 Linux-system får jeg følgende resultater:

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 bruger dit operativsystems sorteringsunderstøttelse, så det er muligt for resultaterne at variere lidt fra værts-OS til værts-OS. Især har i det mindste nogle versioner af Mac OS X brudt unicode-sorteringshåndteringen markant.



  1. Generel fejl:OS-version stemmer ikke overens

  2. Hvordan aktiverer jeg php til at arbejde med postgresql?

  3. Brug af JSONB i PostgreSQL:Sådan gemmes og indekseres JSON-data effektivt i PostgreSQL

  4. PL/SQL-blokeringsproblem:Ingen data fundet fejl