sql >> Databáze >  >> RDS >> PostgreSQL

Nesprávné řazení PostgreSQL

Chování řazení pro text (včetně char a varchar stejně jako text typ) závisí na aktuálním řazení vašeho národního prostředí.

Viz předchozí úzce související otázky:

  • PostgreSQL řazení
  • https://stackoverflow.com/q/21006868/398670

Pokud chcete provést zjednodušené řazení podle hodnoty ASCII, spíše než správně lokalizované řazení podle místních jazykových pravidel, můžete použít COLLATE doložka

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

nebo globálně změnit řazení databáze (vyžaduje výpis a opětovné načtení nebo úplné přeindexování). Na mém systému Fedora 19 Linux dostávám následující výsledky:

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 používá podporu řazení vašeho operačního systému, takže je možné, že se výsledky budou mírně lišit od hostitelského OS k hostitelskému OS. Zejména alespoň některé verze systému Mac OS X výrazně porušily práci s řazením unicode.



  1. Jak nastavit proměnnou z SQL dotazu?

  2. Vložte data a nastavte cizí klíče pomocí Postgres

  3. Porovnání období

  4. Robustnější kolace s podporou ICU v PostgreSQL 10