Sven Rautenberg: Problem mit utf8 bei MySQL Transfer

Beitrag lesen

Moin!

Du musst den Transfer in viele Schritte zerlegen und bei jedem Schritt testen, ob du noch den gewünschten Zeichensatz hast:

Nein, so kompliziert ist es nicht.

PHP verhält sich hinsichtlich des Encodings in seinen Strings neutral, die Bytes werden nicht geändert.

Deshalb ist auch dein mb_internal_encoding() hier irrelevant, weil das sich nur auswirkt, wenn mb_*-Funktionen benutzt werden - bei MySQL-Querys ist das nicht der Fall.

Wichtig ist aber, jeder DB-Connection mitzuteilen, mit welchem Encoding man den kommunizieren will - also "SET NAMES 'utf8'".

Wenn das auf beide Connections angewendet wird (einmal nach Verbindungsaufbau), steht PHP-seitig einem Kopieren der Daten von A nach B nichts im Weg, das sollte so problemlos funktionieren. Übrigens auch unabhängig von der gewählten Kollation der Spalten - MySQL codiert das um, deswegen ja das SET NAMES.

Schwieriger wird es natürlich, wenn auch noch eine Textausgabe auf eine Webseite gewünscht ist. Dann ist auch dort das korrekte Encoding zu setzen, Fehldarstellungen haben aber keinerlei Aussagekraft über die Korrektheit der DB-Kopieroperation.

Im übrigen möchte ich darauf hinweisen, dass man durchaus auch zwei Datenbanken auf EINEM Server über genau EINE Connection bearbeiten kann: "SELECT db1.tabelle1.spalte, db2.tabelle1.spalte FROM db1.tabelle1 JOIN db2.tabelle1 ON db1.tabelle1.spalte = db2.tabelle1.spalte ..."

- Sven Rautenberg