Postgresql-Sortierung sprachspezifischer Zeichen (Sortierung)

Ich als Sprecher einer Sprache, die einige ungewöhnliche Zeichen wie ÕÜÖÄ hat, denke, dass wenn ich eine App erstelle, mit der Benutzer Inhalte auf Estnisch in einer Datenbank speichern können, diese App auch in der Lage sein sollte, die Daten korrekt nach zu sortieren Spracheinstellungen.

Da es sich um eine Sprache handelt, die sehr klein ist, wie es in Estnisch der Fall ist, muss berücksichtigt werden, dass andere Benutzer die App möglicherweise verwenden und eine Sortierung in ihrer Sprache wünschen. Einige europäische Sprachen haben auch eine eigene Mischung von Sonderzeichen.

Es ist noch schlimmer, wenn Sie Sprachen wie Russisch in die Mischung einbeziehen - sie haben völlig unterschiedliche Charaktere.

Jetzt, da ich weiß, dass die Django-Site all diese Sonderzeichen gut darstellen kann, mache ich mir nur Sorgen um die Sortierung, die auf Datenbankebene stattfindet. Wie kann ich also sicherstellen, dass Objekte aus der Datenbank gelesen und in die richtige, sprachspezifische Reihenfolge sortiert werden?

Beispielfall: Wenn ich eine Datenbank mit utf8-Codierung und mit Standardkollatierung (engl. Utf8) erstelle, dann enthält die Tabelle Werte

alan
oskar
ölen
älan
öskar

Wird sortiert (mit "select * from test order by nimi asc;") nach:

alan
älan
ölen
oskar
öskar

Welches ist falsch. Wenn ich eine Datenbank mit POSIX-Kollatierung erstelle, führt dieselbe Abfrage zu folgenden Ergebnissen:

alan
oskar
älan
ölen
öskar

Dies scheint richtig zu sein, denn wenn Sie ein paar weitere Namen (õlan, ålan) in die Mischung werfen, dann sind die Ergebnisse:

alan
oskar
älan
ålan
õlan
ölen
öskar

Denn laut estnischem Alphabet sollten sie sein:

alan
oskar
õlan
älan
ölen
öskar
ålan (cause å is not in estonian alphabet)

Ich verwende postgresql 9.1.9 und verstehe, dass Kollatierungsunterstützung seit 9.1 verfügbar ist (http://www.postgresql.org/docs/9.1/interactive/collation.html).

Soll ich das benutzen?

SELECT nimi COLLATE "et_EE" FROM test ORDER BY nimi ASC;

Fehler mit Fehler FEHLER: Kollatierung "et_EE.utf8" für die Codierung "UTF8" ist nicht vorhanden. Warum das? Muss ich diese Kollatierungsregel erstellen oder so? Ist dies der richtige Weg, um bei jeder Abfrage eine Kollatierungsregel festzulegen, wenn die Ergebnisse in der richtigen Reihenfolge angezeigt werden sollen?

Alan

Edit: 1 zur Beantwortung der Frage: mein Gebietsschema -a zeigt:

C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
et_EE
et_EE.iso88591
et_EE.utf8
POSIX
zh_CN.utf8
zh_SG.utf8

sudo locale-gen et_EE.UTF-8
[sudo] password for alan: 
Generating locales...
  et_EE.UTF-8... up-to-date
Generation complete.
sudo locale-gen et_EE
Generating locales...
  et_EE.ISO-8859-1... up-to-date
Generation complete.

SQL schlägt jedoch immer noch fehl

Edit2: Ich denke, ich habe es herausgefunden. Ich musste die Kollatierung auch in postgresql selbst erstellen (http://www.postgresql.org/docs/9.1/static/sql-createcollation.html):

CREATE COLLATION "et_EE" (LOCALE = "et_EE.utf8")

Ich schätze, ich muss diese Shell-Gebietsschemadateien erstellen, von denen Sie mir erzählt haben, Zero323, und dann Kollatierungen zur Datenbank erstellen, und dann bin ich fertig.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage