mAirList-DB (Netzwerk) Falschdarstellung deutscher Sonderzeichen

Wir haben kürzlich von der SQLite auf die PostGreSQL umgestellt, jetzt habe ich ein Problem mit den Umlauten. Bei der Titelanzeige würde mich das nicht stöhren, aber es werden auch Files mit Umlauten im Dateinamen nicht gefunden.
Die Tabellen der DB wurden alle durch mAirList angelegt.

Server: Debian
PostgreSQL Version: 8.3
Datenabnk Zeichensatz: UTF-8
mAirList Version: 3.1 Build 764
Sicherheitsrollen: keine
Protokoll/DLL-Version: postgresql-7

Was machen wir falsch?

Es wäre zunächst zu klären, ob die Umlaute falsch in der Datenbank gespeichert sind, oder ob mAirList sie nur falsch anzeigt, weil es mit einem falschen (Client-)Encoding auf die Datenbank zugreift.

Wie sehen die Werte denn aus, wenn du mit, sagen wir, pgAdmin III in die Tabellen schaust? Ist dann alles ok?

EDIT: Statt pgAdmin tut’s natürlich auch psql auf der Konsole.

OK, mein konkretes Beispiel sind französische Sonderzeichen, aber ich denke das tuht nix zur Sache.
In der DB sieht es mit PG Admin gut aus:

"Kate_Ryan_-_Désenchantée.mp3"

Meldung im Protokoll:

Warnung	Überspringe fehlerhaftes Element "Désenchantée": Cannot open file "M:\MP3\2000\Kate_Ryan_-_Désenchantée.mp3". Das System kann die angegebene Datei nicht finden

Demnach hat mAirList beim Synchronisieren die Daten richtig erfasst. Irgendwo beim erstellen der Playliste oder beim ausspielen passiert aber eine Fehler. So wie ich das in der DB Struktur (mit meinem groben Halbwissen) ablese werden der jeweiligen Stunde nur die IDs zugeordnet, hier spielen die Zeichen also gar keine Rolle.

Bliebe also ein Problem in der Ausspielinstanz?

EDIT: Weiterer Test mit libpq.dll aus dem 8.3.11 Paket, exakt passend zu Server Version. Protokoll umgestellt auf postgresql-8. Fehlermeldung: ssleay32.dll fehlt. Ich habe nur auf den Login Test geklickt, sonst nichts.

Die 8er DLLs benötigen noch einen Haufen Zusatz-DLLs. Die sollten alle irgendwo im PostgreSQL-Verzeichnis herumfliegen und müssen auch zu mAirList rüberkopiet werden. Das ist auch der Grund, warum ich noch immer die alte 7.4er bevorzuge, die ist einfach handlicher.

Zum Problem, wenn die Datenbank wirklich mit UTF8 angelegt wurde, dann ist das wahrscheinlich wirklich ein Problem auf Client-Seite. mAirList versucht anhand der Windows-Ländereinstellungen den korrekten Zeichensatz zu raten, mit dem es auf die Datenbank zugreifen muss. Für normale deutsche Windows-System ist das in der Regel “WIN1252”. Wenn der korrekte Zeichensatz nicht ermittelt werden konnte, wird UTF8 angenommen - genau das scheint bei euch der Fall zu sein, denn die Strings sehen sehr nach kaputtem bzw. nicht erkannten Unicode aus.

Du kannst ja mal dieses Script ausführen:

var
  conn: IZConnection;
  stmt: IZPreparedStatement;
  rs: IZResultSet;

begin
  conn := ImAirListDB(Database(0)).GetConnection;
  stmt := conn.PrepareStatement('SHOW client_encoding');
  rs  := stmt.ExecuteQueryPrepared;
  while rs.Next do
    SystemLog('Client encoding is ' + rs.GetString(1));
end.

Im System-Log steht dann, welcher Zeichensatz verwendet wird. Sollte da etwas anderes als WIN1252 stehen (und ihr ein normales deutsches Windows-System haben), dann ist bei der Erkennung etwas schiefgelaufen.

Das Script funktionierte leider nicht. Hat zum kompletten Absturz von mAirList geführt, wobei das auch die hier
http://forum.mairlist.com/index.php/topic,4730.msg33735.html#msg33735 beschriebene Ursache haben könnte.

Jedenfalls habe ich meinen XP Rechner jetzt als Backup System für den Server eingerichtet, und dort werden die Umlaute korrekt dargestellt. Deine Vermutung scheint also zu stimmen. Musst Du noch wissen welcher Zeichensatz erkannt wurde? Oder kann ich den irgendwo fest vorgeben? Das würde unser Problem vermutlich lösen.

Danke
Greetz
Malte

Komisch, bei mir lief das Script problemlos. Irgendwas muss mit eurem Server nicht stimmen. Es wäre schon interessant zu wissen gewesen, was dort als Encoding ermittelt wurde. Aber wie dem auch sei:

Ich habe dir gerade Build 788 hochgeladen. Dort kannst du manuell ein Encoding - ich würde es erstmal mit WIN1252 versuchen - in der database.ini eintragen. Und zwar öffnest du die Datei im Texteditor, suchst den Abschnitt der mAirListDBPro-Verbindung heraus, und fügst dort folgende Zeile ein:

Encoding=WIN1252

So, nun hab ich das Script doch einmal zum laufen bekommen.
Als Client Encoding wurde WIN1252 gefunden.
Und das Problem ist auch nicht mehr da, ohne dass etwas verändert wurde.

Ich krich zu viel…

Der grund warum das Script mAirList zum absurz gebracht hat war, dass irgend etwas mAirList ganz gewaltig langsamer werden lässt nach einer längeren Betriebsdauer. Daher auch die beiden Crash reports von gestern.

Ich bin mir im Moment selber nicht sicher was genau eine längere Betriebsdauer ist, werde das weiter erforschen.
Dieser Thread ist also erstmal erledigt und wird daher geschlossen.

Ich muss das Thema doch noch mal öffnen.
Da der Fehler immer mal wieder sporadisch auftritt. Endlich hab ich das mal live sehen können. Client Endcoding wurde als UTF8 erkannt, nicht als WIN1252.

Die letzten Male wurde es immer als WIN1252 erkannt, diesmal wurde aber der Titel einfach von mAirList aussortiert. Das führt dann aber am Ende der Stunde immer noch zu einer Stille, weil die Playliste zu kurz ist.

Ich werde das jetzt mal festsetzen auf WIN1252, hoffe dass es damit erledigt ist.

Hallo Torben,
ich muss leider diese alte Thema noch mal hoch holen. Trotz Encoding=WIN1252 in der datenbank.ini, tritt immer wieder das Problem auf, dass mAirList der Meinung ist wir hätten lokal eine UTF-8 Kodierung.
mAirList einmal neustarten und der Fehler ist wieder weg.
Was kann ich machen um Die mehr Informationen zu beschaffen um den Fehler zu finden.
Greetz
Malte

Tritt das Problem mitten im laufenden Betrieb auf? Soll heißen, geht die Verbindung erst (Sonderzeichen richtig) und dann plötzlich nicht mehr?

Hmm, ich habe versucht die Logfiles auszuwerten, aber so richtig eindeutig kann ich das leider nicht feststellen.
Vor dem 21.11. war einige Tage alles OK, dann am 21. mehrere Neustartrts wegen Verbindungsprobleme beim Provider danach keine Warnungen und am 22. dann die ersten Aussetzer, aber erst nach der Zwangstrennung des providers (dann ist auch die DB nicht erreichbar).

Ich lasse eine dauer log schreiben, hilft es wenn ich Dir mal ein paar Tage rund um dieses Datum maile? Vielleicht kannst Du noch etwas mehr daraus lesen wie ich.

Schau einfach mal, ob da irgendwelche “SET ENCODING=…”-Befehle drin auftauchen.

Hi Torben,
set Encoding Befehl steht keiner drin. Muss man dazu einen besonderen Log Level einstellen?

Hier mal ein kleiner Auszug aus einem Log:

2010-12-01 01:59:40 Information Führe Event lade Playlist nächste Stunde aus 2010-12-01 02:00:19 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:01:05 Debug Lösche Playlist-Cache-Datei C:\mAirList\PlaylistCache\C63CE324848D6812D0535466DE966DB4\1\2010-12-01-01.mlp 2010-12-01 02:06:07 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:11:54 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:17:41 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:23:27 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:29:14 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:35:01 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:40:48 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:41:03 Warnung Überspringe fehlerhaftes Element "Let´s Twist Again": Cannot open file "M:\Mp3\Oldie\08 - Chubby Checker - Let´s Twist Again.mp3". Das System kann die angegebene Datei nicht finden 2010-12-01 02:46:34 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:52:21 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:58:07 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 02:59:40 Information Führe Event lade Playlist nächste Stunde aus 2010-12-01 03:03:54 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:04:39 Debug Lösche Playlist-Cache-Datei C:\mAirList\PlaylistCache\C63CE324848D6812D0535466DE966DB4\1\2010-12-01-02.mlp 2010-12-01 03:09:41 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:15:28 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:21:14 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:27:01 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:32:47 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:38:34 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:44:21 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:48:20 Warnung Überspringe fehlerhaftes Element "You´re the voice": Cannot open file "M:\MP3\80\John_Farnham_-_You´re_the_voice.mp3". Das System kann die angegebene Datei nicht finden 2010-12-01 03:50:07 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:53:30 Fehler Encoder-Verbindung abgebrochen: Fehlercode 0. Neuer Verbindungsversuch in 15 Sekunden. 2010-12-01 03:53:45 Information Encoder verbindet mit musik.web-radio-regional.de:8000 2010-12-01 03:53:45 Fehler Fehler beim Verbinden mit dem Streaming-Server musik.web-radio-regional.de:8000: BASS error -1 2010-12-01 03:53:55 Information Encoder verbindet mit musik.web-radio-regional.de:8000 2010-12-01 03:53:55 Fehler Fehler beim Verbinden mit dem Streaming-Server musik.web-radio-regional.de:8000: BASS error -1 2010-12-01 03:54:05 Information Encoder verbindet mit musik.web-radio-regional.de:8000 2010-12-01 03:54:05 Information Encoder-Verbindung zu musik.web-radio-regional.de:8000 hergestellt 2010-12-01 03:55:54 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 03:59:40 Information Führe Event lade Playlist nächste Stunde aus 2010-12-01 04:01:40 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 04:02:24 Debug Lösche Playlist-Cache-Datei C:\mAirList\PlaylistCache\C63CE324848D6812D0535466DE966DB4\1\2010-12-01-03.mlp 2010-12-01 04:07:26 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 04:13:12 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 04:18:58 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 04:24:44 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 04:30:30 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 04:36:16 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-12-01 04:42:02 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert
Wobei das eine Jingle tatsächlich fehlt, wurde inzwischen aus der Planung genommen.
Währe “SET ENCODING” Debug, Information oder Warnung?

Der letzte Neustart sah so aus, ich würde mal vermuten da liegt schon der Fehler, bin mir aber nicht sicher.
ENCODING ist wie gesagt in der DB.INI festgesetzt.

2010-11-30 20:15:31 Information mAirList Version 3.1.3 Build 831 startet... 2010-11-30 20:15:31 Status Lade Modul Core... 2010-11-30 20:15:31 Status Lade Modul Playout... 2010-11-30 20:15:31 Status Lade Modul LayoutSkin... 2010-11-30 20:15:31 Status Lade Modul Scripting... 2010-11-30 20:15:31 Status Lade Modul CoreGUI... 2010-11-30 20:15:31 Status Lade Modul CoreRemote... 2010-11-30 20:15:31 Status Lade Modul CoreLogging... 2010-11-30 20:15:31 Status Lade Modul BassAudio... 2010-11-30 20:15:32 Status Lade Modul BassASIO... 2010-11-30 20:15:32 Status Lade Modul BassVST... 2010-11-30 20:15:32 Status Lade Modul AutoCue... 2010-11-30 20:15:32 Status Lade Modul Mixdown... 2010-11-30 20:15:32 Status Lade Modul BassStreaming... 2010-11-30 20:15:32 Status Lade Modul SQLDatabases... 2010-11-30 20:15:32 Status Lade Modul DBLite... 2010-11-30 20:15:32 Status Lade Modul DBPro... 2010-11-30 20:15:32 Status Lade Modul WindowsMixer... 2010-11-30 20:15:32 Status Lade Modul WindowsMidi... 2010-11-30 20:15:32 Status Lade Modul WindowsJoystick... 2010-11-30 20:15:32 Status Lade Modul IOWarrior... 2010-11-30 20:15:32 Status Lade Modul MiscDatabases... 2010-11-30 20:15:32 Status Lade Modul DigAS... 2010-11-30 20:15:32 Status Lade Modul SAS... 2010-11-30 20:15:32 Status Lade Modul WMClient... 2010-11-30 20:15:32 Status Lade Modul DMAX... 2010-11-30 20:15:32 Status Lade Modul HTTP... 2010-11-30 20:15:32 Status Lade Modul InpOut32... 2010-11-30 20:15:32 Status Lade Modul AudioFileTypes... 2010-11-30 20:15:32 Status Lade Modul Regions... 2010-11-30 20:15:32 Status Lade Modul audimark... 2010-11-30 20:15:32 Status Lade Modul Powergold... 2010-11-30 20:15:32 Status Lade Modul DHD... 2010-11-30 20:15:32 Status Lade Modul REST... 2010-11-30 20:15:32 Status Lade Modul DRS2006... 2010-11-30 20:15:42 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:20:53 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:26:03 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:31:15 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:36:43 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:42:11 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:48:04 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:53:56 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 20:59:40 Information Führe Event lade Playlist nächste Stunde aus 2010-11-30 20:59:47 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:05:36 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:06:21 Debug Lösche Playlist-Cache-Datei C:\mAirList\PlaylistCache\C63CE324848D6812D0535466DE966DB4\1\2010-11-30-20.mlp 2010-11-30 21:11:23 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:17:09 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:22:56 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:28:42 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:34:29 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:35:30 Warnung Überspringe fehlerhaftes Element "": Cannot open file "M:\Mp3\Beiträge\friede- freude-gänsebraten.mp3". Das System kann die angegebene Datei nicht finden 2010-11-30 21:40:16 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:46:03 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:51:49 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert 2010-11-30 21:57:36 Debug Playlist-Cache für PostGreSQL auf Musik.w-r-r.net wird aktualisiert

Ah, sorry, ich meinte das Logging im PostgreSQL-Server. Dort kann man irgendwo einstellen, dass sämtliche Queries mitprotokolliert werden. Musst du mal die Doku wälzen.

OK, wird geprüft.

OK, das mit den Log files vom Server wird noch etwas dauern, wir hatten gerade einen HDD Crash auf einem anderen Server.
Ich habe gestern mal die neue mAirList Version 3.1.4 eingespielt. Irgendwie scheint das starten schneller zu klappen und die DB Kommunikation ist trotz unserer langsamen Verbindung irgendwie stabieler (gefühlter Eindruck).
Vielleicht ist damit unser Problem quasi nebenbei behoben worden, wir werden sehen.
Ich denke mal das hängt damit: [-] GUI may freeze when SQL logging server is unreachable zusammen.

Hallo Torben,
ich hab zwar leider noch keine SQL Log files, aber etwas weiter bin ich dennoch.

Es sieht so aus, als würde tatsächlich beim Neustart von mAirList der Fehler auftreten und zwar immer dann wenn ich relativ schnell hintereinander mAirList beende und neu starte. Was z.B. unser Silence Detector macht, wenn er mit AutomationStartNext nicht weiter kommt.
Durch ein Netzwer oder Encoder Problem (bin da noch nicht ganz sicher) haben wir gelegentlich mal das Problem dass mAirList zwar noch spielt, aber die GUI und scheinbar auch die Remote Schnittstelle hängt. Wenn ich dann mAirList abwürge, dauert es relativ lange 20-30sec bis wirklich alles aus dem Taskmanager verschwunden ist. Unter anderem auch die Lame.exe. Wobei ich nicht genau sagen kann, wie der Silence Detecor versucht mAirList zu beenden.
Wenn ich da nicht lange genug warte, hab ich das Zeichensatzproblem, obwohl ich nach wie vor in der DB-Congfig den Entsprechenden Zeichensatz festsetze. Aber nur unter Win7 x64. Auf meinem Backup System mit XP SP3 hab ich zwar auch das Phänomen beim beenden, aber kein Zeichensatzproblem. Da bekomme ich sogar nach bis zu 60sec nach dem ich mAirList normal beendet habe, noch eine Freeze Meldung. Das ist aber ein anderes Thema.

Da unser Zeichensatzproblem nur auf der Win7 Kiste auftritt, ist vielleicht das hier: http://forum.mairlist.com/index.php/topic,4967.msg35537.html#msg35537 eine Ursache, oder hat der Bug auf die DB keine Auswirkung?

An die Sache mit den Spracheinstellungen dachte ich auch schon. Probier die mal zurückzusetzen. Schaden kann es nicht.

Dass mAirList beim Beenden schonmal hängt, wenn der Encoder noch aktiv war, ist ein bekanntes Problem. Dem scheint ein Bug in der bassenc.dll zugrunde zu liegen. So richtig dahintergekommen bin ich noch nicht, warum das passiert.

Ok, schaun wir mal. Hab beides gemacht, Zurücksetzen unter erweitert und einmal EN-US und zurück DE-DE.
Das interessante ist, dass ich gerade unter XP SP3 MUI mit den Regionaleinstellungen kämpfe, für einen Kunden :wink: Zufälle gibt’s…