ü ß usw. in mysqldump
Florian Schmid
- datenbank
0 Matze0 Florian Schmid
Guten morgen zusammen :-)
Ich habe folgendes Problem:
Aus einer MySQL4-Datenbank habe ich mir einen dump rausgelassen.
Nun habe ich den ganzen Kram heute über Nacht in eine andere DB kopiert (auch MySQL, gleiche Version).
Jetzt habe ich festgestellt, dass schon im Dump Sonderzeichen wie ä, ö, ü und ß durch so interessante Dinge wie z.B. "ü" für ü oder "ß" für ß ersetzt wurden.
Nun habe ich den Kram schon in der neuen Datenbank drin und kann auch nicht mal einfach eben schnell in der Dump-Datei alles per Suchen & Ersetzen ersetzen, da die Datei knapp 1,8 GB hat und ich gerade mal die Hälfte an RAM habe.
Sprich: selbst wenn das funktionieren würde, würde es wohl 4 Wochen dauern...
Nun meine Frage: Gibt es eine Möglichkeit, irgendwas irgendwie in der Datenbank umzustelln, sodass das alles wieder richtig läuft, oder muss ich wirklich irgendwie per find&replace durch die dump-Datei?
ich kann sowohl in der "alten" als auch in der "neuen" Datenbank äöü und Co. speichern, ändern, auslesen etc. - aber beim Dump hat er das wohl eben nicht gemacht.
Danke schonmal im Voraus für eure Mühen,
Florian.
Hallo,
ich kann sowohl in der "alten" als auch in der "neuen" Datenbank äöü und Co. speichern, ändern, auslesen etc. - aber beim Dump hat er das wohl eben nicht gemacht.
Dann stimmt die Zeichenkodierung beim Dump nicht mehr.
Wie sieht denn dein Dump-Befehl aus? Welche Parameter besitzt er?
Grüße, Matze
Hallo,
also wie phpmyadmin das macht, weiss ich nicht, da hab ich es rausgelassen, weil der Originaldump bei jedem 2. Query nen SQL-Error gebracht hat...
Habe dann schlussendlich laute Einzeldateien mit je 2-3 Tabellen aus dem phpmyadmin rausgelassen...
Danke, Flo.
Hallo,
also wie phpmyadmin das macht, weiss ich nicht...
Du kannst dir doch anzeigen lassen was PHPMyAdmin für Code generiert hat - wenn es das nicht sowieso schon tut.
Vielleicht hilft dir ja das Handbuch weiter.
Dort steht z.B.
Verwendet charset_name als Standardzeichensatz. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“. Sofern nicht angegeben, verwendet mysqldump utf8.
Wenn PHPMyAdmin bei dir nicht utf8 verwendet, hätten wir eine mögliche Ursache.
Ein anderer Grund könnte sein, dass die Zeichen korrekt kodiert in der Datei stehen und du nur 'glaubst' sie seien falsch.
Importierst du sie dann wieder in eine Datenbank mit der richtigen Kodierung sollte alles wieder stimmen.
Grüße, Matze
Hey,
ich habe mir gerade noch ein kleines PHP-Script gebaut, dem ich jetzt mal 4 GB RAM gönne und einfach mal alle äöüÄÖÜß"' ersetze.
Ich hoffe, dass das klappt.
Wenn nicht, werde ich mich wohl doch mal mit dem Handbuch auseinandersetzen müssen und über die Codierung nachdenken.
Danke dir und noch einen schönen Tag :-)
Flo
Hallo,
ich habe mir gerade noch ein kleines PHP-Script gebaut, dem ich jetzt mal 4 GB RAM gönne und einfach mal alle äöüÄÖÜß"' ersetze.
Wer keine Arbeit hat, macht sich welche^^
Ich hoffe, dass das klappt.
Viel Glück!
Wenn nicht, werde ich mich wohl doch mal mit dem Handbuch auseinandersetzen müssen(...)
Mal sehn wer bei der Auseinandersetzung gewinnt ;)
Danke dir und noch einen schönen Tag :-)
Dito.
Grüße, Matze
echo $begrüßung;
Aus einer MySQL4-Datenbank habe ich mir einen dump rausgelassen.
Diese Angabe ist nicht genau genug. MySQL 4.0 hatte nur ein sehr eingeschränktes Zeichensatzmanagement. Das wurde mit Version 4.1 umgestellt und stark erweitert.
also wie phpmyadmin das macht, weiss ich nicht, da hab ich es rausgelassen, weil der Originaldump bei jedem 2. Query nen SQL-Error gebracht hat...
Nach meinem Kenntnisstand erzeugt der phpMyAdmin in neueren Versionen immer einen UTF-8-kodierten Dump. Auch dein Fehlerbild bestätigt das, denn es zeigt UTF-8-kodierte Zeichen, die als ISO-8859-1 interpretiert wurden.
Diese Kodierung muss man beim Importieren ebenfalls wieder angeben. Darauf hast du offensichtlich nicht geachtet und den Import als ISO-8859-1 bzw. Latin1 durchgeführt.
Am einfachsten ist es, wenn du den Import wiederholst und dabei UTF-8 als Kodierung angibst. Die Daten im System umzuschreiben ist zwar möglich aber nicht ganz einfach. Auf alle Fälle solltest du dir eine Kopie der Datenbankdateien anlegen, nicht dass am Ende der Datenbestand unwiederherstellbar vermurkst ist.
Zur Vorgehensweise siehe </archiv/2006/9/t136745/#m888404>.
Es kann aber auch sein, dass die Daten im DBMS in der richtigen Kodierung stehen, du aber beim Abfragen per Script nicht beachtet hast, dass das DBMS so eingestellt ist, dass es per Default UTF-8 spricht. In dem Fall wären die Umlaute im phpMyAdmin richtig zu sehen, und du musst den Hinweis beachten, der bereits auf der Einstiegsseite des Kapitels Character Set Support zu finden ist.
echo "$verabschiedung $name";
Hallo dedlfix und danke für deine Antwort :-)
Also das heisst, die Zeichen sind in UTF8 nicht "verloren" sondern werden eben auf meinem Bildschirm als dieser "Salat" angezeigt!?
Also der "alte" Server hat MySQL - 4.1.11 und es steht drin "MySQL-Zeichensatz: UTF-8 Unicode (utf8)"
Der neue Server hat MySQL - 4.0.25 und es steht nicht drin, welcher Zeichensatz verwendet wird.
Ich habe jetzt folgendes versucht:
mysql -uUSER -pPASS --default-character-set=utf8
Und es dann nochmal importiert (\u DB_NAME und dann .export.sql).
Kommt aber genau das gleiche raus...
im phpMyAdmin direkt kann ich es nicht importieren, da die Datei viel zu groß ist...
Kannst du mir vielleicht so ein bisschen für DAUs weiterhelfen... ;-) ?
Es ist eben so, dass auch, wenn ich im vi auf der Konsole die Datei öffne, die Umlaute schon so komisch sind...
Also muss es ja schon "falsch" exportiert worden sein!?
Danke.
echo $begrüßung;
Also der "alte" Server hat MySQL - 4.1.11 und es steht drin "MySQL-Zeichensatz: UTF-8 Unicode (utf8)"
Das hat dir bestimmt der phpMyAdmin gesagt und diese Angabe ist nicht weiter wichtig. Es gibt ein paar mehr Default-Einstellungen für Zeichenkodierungen in MySQL. Du findest sie unter den Server-Variablen, die mit "character_set" beginnenden. Erläuterungen dazu stehen im bereits erwähnten Handbuchkapitel.
Der neue Server hat MySQL - 4.0.25 und es steht nicht drin, welcher Zeichensatz verwendet wird.
Diese Version kann mit UTF-8 nicht umgehen. Mein Vorschlag aus dem Archiv ist darauf nicht anwendbar.
Du kannst nur den Export wiederholen, diesmal aber mit den Kommandozeilentools von MySQL (mysqldump) und der expliziten Angabe der gewünschten Kodierung "Latin1". Du müsstest ebenfalls den Kompatibilitätsmodus ("mysql40") beachten (Option --compatible).
Alternative wäre ein Editor, der die Dump-Datei als UTF-8 liest und als ISO-8859-1 speichert, oder andere Tools, die eine Konvertierung von UTF-8 nach ISO-8859-1 vornehmen können (z.B. iconv unter Linux/Unix).
(Die Bezeichnungen ISO-8859-1 und Latin1 bezeichnen im Wesentlichen das gleiche.)
echo "$verabschiedung $name";
Hallo,
Alternative wäre ein Editor, der die Dump-Datei als UTF-8 liest und als ISO-8859-1 speichert, oder andere Tools, die eine Konvertierung von UTF-8 nach ISO-8859-1 vornehmen können (z.B. iconv unter Linux/Unix).
Mit iconv habe ich es nun geschafft.
Dankeschön :-)
Ein schönes Wochenende wünscht
Flo.