locale

Hallo,

bin vor etwa 3 Monaten von MySQL auf PostGreSQL umgestiegen.

Dabei habe ich aber nun ein Problem mit den localen. Als ich Postgresql via deb Package installiert hatte, war im System als locale “en_US.ISO-8859-15” eingestellt.
Von meinem Projekt sind alle PHP Dateien in UTF-8 codiert. Die Datenbank, welche ich erstellt habe, habe ich UTF-8 als Kodierung ausgewählt. Nun hatte ich das Problem in PHP, dass mir die PHP Funktion strtolower() alle Umlaute verschwinden hat lassen. So bin ich auf die Idee gekommen und hab die System locale auf “de_DE.UTF-8” verändert. Nun hatte ich das Problem mit PHP nicht mehr.
Aber meine PostGresQL Datenbank lässt mir bei folgender SQL auch die Umlaute verschwinden:

SELECT LOWER(name) FROM allys

Somit sind bei der Spalte name alle Umlaute weg.

Ich habe nun im Internet folgendes gefunden:

http://www.postgresql.org/files/documentation/books/pghandbuch/html/charset.html#LOCALE

Bei einigen Locale-Kategorien steht der Wert für die gesamte Lebensdauer des Datenbankclusters fest. Das heißt, nachdem initdb ausgeführt wurde, dann können Sie ihn nicht mehr verändern. Diese Kategorien sind LC_COLLATE und LC_CTYPE.

Muss ich nun wirklich meine komplette Datenbank löschen, um die Variablen “lc_*” ändern zu können.?

Was ist, wenn ich nun auch chinesische Zeichen verwenden werde, kann ich dann weiterhin noch “de_DE.UTF-8” verwenden?

Danke im Vorraus.

Sind denn die Umlaute noch da, oder schon flasch reingekommen?

Ich bin da jetzt nicht wirklich der Guru in diesen Dingen, aber vielleicht hilft Dir dieser Vortrag von Susanne E. zur FOSDEM weiter:
Image:Fosdem2008 encoding.pdf - PostgreSQL Wiki

Andreas

Hallo,

Umlaute sind alle da. nur beim Aufruf der Funktion LOWER() gibts Probleme. Werd wmir mal dsa PDF durchlesen.

Leider finde ich in dem PDF auch nichts, wie ich das ändern könnte :-(.

Hätte noch eine Antwort auf meine andere Frage:

Was ist, wenn ich nun auch chinesische Zeichen verwenden werde, kann ich dann weiterhin noch “de_DE.UTF-8” verwenden?

Wenn es nicht möglich ist, was ist, wenn ich einer Datenbank 2 verschiedene Sprachen drinnen habe, zB. Deutsch und chinesisch.

Locale ist nun auf UTF8 geändert, nun hab ich keine Probleme mehr :-). Musste Datenbank exportieren, initdb ausführen und importieren

Danke für eure Hilfe.