Ich habe gestern ein paar Stunden damit verbracht, mir über dieses Problem die Haare auszureißen:
Ich habe eine Datenbank auf einem MySQL 4.1.22 Server mit der Codierung "UTF-8 Unicode (utf8)" (wie von phpMyAdmin gemeldet). Die Tabellen in dieser Datenbank haben als Standardsprache latin2 festgelegt. Aber die Webanwendung (CMS Made Simple in PHP geschrieben), die sie verwendet, zeigt Seiten in utf8 an...
Wie gescheitert das auch sein mag, es funktioniert tatsächlich. Die Webanwendung zeigt die Zeichen korrekt an (meistens Tschechisch und Polnisch werden verwendet).
Ich führe aus: "mysqldump -u xxx -p -h yyy dbname > dump.sql". Dies gibt mir ein SQL-Skript, das:
- in jedem Editor (wie Notepad+) bei Anzeige in UTF-8 perfekt aussieht - alle Zeichen werden korrekt angezeigt
- alle Tabellen im Skript haben als Standardsprache latin2
- es enthält die Zeile "/*!40101 SET NAMES latin2 */;" am Anfang (unter anderen Einstellungen)
Jetzt möchte ich diese Datenbank auf einen anderen Server exportieren, der mit MySQL 5.0.67 läuft, ebenfalls mit der Servercodierung "UTF-8 Unicode (utf8)". Ich habe die gesamte CMS Made Simple Installation kopiert, das dump.sql Skript kopiert und "mysql -h ddd -u zzz -p dbname < dump.sql" ausgeführt. Danach sind alle Zeichen auf den CMSMS-Webseiten durcheinander.
Ich habe versucht einzustellen:
SET character_set_client = utf8;
SET character_set_connection = latin2;
Und alle Kombinationen (nur zur Sicherheit, auch wenn es für mich keinen Sinn ergibt): latin2/utf8, latin2/latin2, utf8/utf8, usw. - hilft nicht. Alle Zeichen sind immer noch durcheinander, manchmal jedoch auf eine andere Weise :).
Ich habe auch versucht, alle lateinischen Einstellungen im Skript durch utf8 zu ersetzen (Namen und Standardsprachen für Tabellen). Nichts.
Gibt es hier MySQL-Experten, die in nur wenigen Worten (ich bin sicher, es ist schließlich einfach) erklären könnten, wie dieses ganze Codierungszeug wirklich funktioniert? Ich habe 9.1.4. Verbindungssprachen und -kollationen gelesen, aber dort nichts Hilfreiches gefunden.
Danke, Matt