sql >> Database >  >> RDS >> PostgreSQL

Onjuiste sortering/sortering/volgorde met spaties in Postgresql 9.4

Op Unix/Linux SE legde een vriendelijke expert uit dat wat je ziet de juiste manier is om Unicode te sorteren. Kortom, de standaard probeert te sorteren:

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

Als spaties net zo belangrijk waren als letters, zou de soort de verschillende identieke spellingen van Fred en John niet kunnen scheiden. Dus wat er gebeurt, is dat het eerst sorteert zonder spaties. In een tweede doorgang worden strings die hetzelfde zijn zonder witruimte gesorteerd. (Dit is een vereenvoudiging, het echte algoritme ziet er vrij complex uit, waarbij witruimte, accenten en niet-afdrukbare tekens verschillende prioriteitsniveaus worden toegewezen.)

U kunt de Unicode-sortering omzeilen door het volgende in te stellen:

export LC_ALL=C

Of in Postgres door te casten naar byte-array om te sorteren:

order by name::bytea

Of (uit het antwoord van Kiln) door de C . op te geven sortering:

order by name collate "C"

Of door de standaardsortering voor de kolom te wijzigen:

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



  1. Ontdek 10 minder bekende mogelijkheden van SQL Diagnostic Manager

  2. Zijn GUID-botsingen mogelijk?

  3. ORA-03135 – RMAN Duplicaat

  4. TIMESTAMPADD() Voorbeelden – MySQL