Ist ein Unicode-Problem, und wurde soeben von mir behoben. Geht dann in 1.5.23.
Nee, geht leider nicht... :-(
@cevou: Sag mal, kannst du noch einbauen, dass auch die Art des Endes aus der eldoDB importiert wird? Also F für Fade, C für Cold End und CF für eine Mischung.
@cevou: Sag mal, kannst du noch einbauen, dass auch die Art des Endes aus der eldoDB importiert wird? Also F für Fade, C für Cold End und CF für eine Mischung.
Guck mal bitte in deine Registry (mit regedit) und sag mir, welcher Wert unter
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage für “ACP” eingetragen ist.
mAirList versucht automatisch, den benötigten PostgreSQL-Zeichensatz zu ermitteln (anhand des Windows-Zeichensatzes), allerdings gibt es unter Windows über 100 verschiedene Codepages, und ich hatte keine Lust, die alle aufzuführen
Oops, ja, das Query hatte ich gerade mal eben so da hingeschrieben
Ich fasse nochmal eben zusammen, was gegeben sein muss, damit die Umlaute richtig angezeigt werden:
Die PostgreSQL-Datenbank (meist “radiodb”) muss mit dem Encoding “UTF8” angelegt sein. Ob das so ist, kann man herausfinden, wenn man psql startet und “\l” eingibt:
radiodb=# \l
List of databases
Name | Owner | Encoding
------------+----------+-----------
postgres | postgres | UTF8
radiodb | tw | UTF8
...
Damit ist schonmal sichergestellt, dass PostgreSQL die Umlaute so erkennt, wie sie radioDB da reinschreibt. Auf meinem Linux-PostgreSQL scheint das default zu sein. Wie es unter Windows ist, weiß ich nicht. Ist das bei dir so, Agent?
Zweitens muss der Client - hier mAirList - das richtige “Ausgabe-Encoding” setzen. Dieses muss der in Windows eingestellten Codepage entsprechen. Leider benutzt Windows ganz andere Bezeichner für die Codepages, so dass mAirList eine kleine Umrechnungstabelle Codepage->Encoding eingebaut hat. Natürlich habe ich da zunächst nicht alle 100 Codepages aufgenommen, aber 1252 steht in jedem Fall drin, und wird zum PostgreSQL-Encoding “WIN1252”.
Ich werde für die nächste Version einbauen, dass man das Encoding auch von Hand in der Config eintragen kann. Dann ist man nicht mehr auf die automatische Erkennung angewiesen, sondern muss nur noch sicherstellen, dass die Datenbank auch als “UTF8” erzeugt wurde (s.o.).
Dann musst du vermutlich die Datenbank einmal löschen und neu anlegen, und zwar mit dem Parameter “-E UTF8”:
dropdb radiodb
createdb -E UTF8 radiodb
Natürlich gehen dabei deine Daten verloren. Entweder musst du also deinen MySQL-Import nochmal durchführen, oder aber du legst dir vorher mit pg_dump eine Sicherung an, die du dann in die neue Datenbank wieder einspielst. Tabellenrechte setzen nicht vergessen.
Sorry, das ist jetzt ziemlich blöd für dich, das gebe ich zu. Aber uns war das Problem wohl vorher nicht bewusst. Du bist nun der erste, der dran glauben muss …
cevou, kannst du sicherstellen, dass die radioDB nach dem Connect IMMER den Befehl
SET CLIENT_ENCODING TO 'UTF8'
zum Server schickt? Nur so kannst du sicherstellen, dass deine Unicode-Daten auch tatsächlich richtig vom Server verarbeitet werden. Sollte nämlich jemand zufällig ein anderes Encoding als UTF8 verwenden (z.B. LATIN1), wandelt PostgreSQL dann alles automatisch um und beim Einspielen in mAirList auch wieder ins richtige Format. Leider ist SQL_ASCII so ziemlich das einzige Encoding, das überhaupt nicht mit Sonderzeichen umgehen kann. Es speichert einfach alles 1:1 und vergisst dabei, mit welchem Encoding die Daten seinerzeit angeliefert wurden.
Dann musst du vermutlich die Datenbank einmal löschen und neu anlegen, und zwar mit dem Parameter "-E UTF8":
dropdb radiodb
createdb -E UTF8 radiodb
Natürlich gehen dabei deine Daten verloren. Entweder musst du also deinen MySQL-Import nochmal durchführen, …
Sorry, so fit bin ich dann doch nicht, kannst du mir da noch mal Schritt für Schritt erklären, wie das geht? Läuft das über die Kommandozeile von postgres?
Sowohl das Löschen als auch Anlegen hab ich bisher über die Radio Datenbank.exe gemacht.
Dann musst du vermutlich die Datenbank einmal löschen und neu anlegen, und zwar mit dem Parameter "-E UTF8":
dropdb radiodb
createdb -E UTF8 radiodb
Wenn ich das über die Befehlszeile mache, fragt er mich ständig nach dem Passwort für den Administrator-Account, akzeptiert mein Passwort aber nicht… :?
cevou, kannst du helfen? Ich hab mit dem Windows-PostgreSQL keine Erfahrung. (Unter Linux würde man “su - postgres” machen und käme dann ganz ohne Passwort rein.)
So, ich habe Postgresql jetzt komplett neu installiert. Schon bei der Installation kann man die Art der Codierung auswählen und da hab ich diesmal UTF8 gesetzt. Damit hat’s dann geklappt, alles wird jetzt automatisch richtig angezeigt. Also wer Postgresql installiert, sollte darauf achten, diese Einstellung bei der Installation zu setzen.
Wenn es jetzt noch möglich wird, dass man aus mAirList in die radiodb speichern kann und dass die Art des Endes noch aus der eldodb importiert wird, dann wird die eldodb in den Ruhestand versetzt.
so langsam dringe ich in die Tiefen deiner komfortablen Datenbankverwaltung vor. Ich würde mir noch sehr wünschen, dass man beim Erstellen von Stundenuhren den Musikelementen Fix-Zeiten und Farben zuweisen kann wie in mAirList. Das gleiche gilt für die Dummy-Informationen.
Das wäre echt wunderbar, vielleicht kannst du das ja realisieren.