Marko: Unicode durch PHP konvertieren

Beitrag lesen

Hallo,

Ich bin in einer etwas komplizierten Situation. Ich habe eine Tabelle in einer MySQL-Datenbank, in der momentan in Latin-1 Textbausteine aus allen möglichen Sprachen gespeichert werden. Texte aus Sprachen wie Griechisch oder Slowakisch sind dabei in ihrer Latin-1-Entsprechung (Kauderwelsch) gespeichert, werden also später erst aus der DB geholt und dann wieder in ihren Zeichensatz (Latin-7, Latin-2, etc) konvertiert.

Dieses Chaos soll ich nun nach Unicode konvertieren.

Das Problem ist, dass ich nicht direkt beim Import alles die Datenbank machen kann, da für diese ja alles Latin-1 ist. Die griechischen Texte müssen also einzeln (aus einer Backup-Tabelle) herausgefischt werden, und im Fall von Griechisch von Latin-7 nach UTF-8 konvertiert werden.

So weit, so gut, das funktioniert auch. Bis auf wenige Ausnahmen, die mir schlaflose Nächte bereiten... Zur Konvertierung nutze ich die PHP-Funktion iconv, die tadellos arbeitet. Wenn ich z.B. einen griechischen Text im Original (Latin-1) aus der DB hole, mit iconv nach UTF-8 konvertiere und an den Browser (unter einem Unicode-Header) ausgebe, sehe ich den Text wie er sein sollte.

Beim Rückspeichern in die Datenbank treten allerdings seltsame Fehler auf. Manche Zeichen (Rho, kleines Epsilon) werden einfach nicht korrekt gespeichert. Es sieht so aus, als würde mysql_query einfach eigenmächtig andere Bits an die Datenbank schicken als von mir angegeben.

Ich habe ein wenig nachgeforscht und gesehen, dass andere ähnliche Probleme hatten. Empfohlen wird das Ausführen von

mysql_query("SET NAMES 'utf8'", $db);

nach Verbindung zur Datenbank. In meinem Fall führt das aber zu der Fehlermeldung

Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

bei Ausführung der nächsten Query.

Hat jemand einen Rat für mich?