Umlaute korrigiert
Technische Info für die, die interessiert woran’s lag und wie ich es korrigiert habe.
Ich habe mir heute ziemlich viel Zeit genommen, um die Ursachen für die Umlaut-Fehler zu analysieren. Dazu habe ich mir die Umgebung nochmal isoliert (MySQL, Webserver, PHP, WordPress) nachgebaut, den MySQL-Dump vom Umzug reingeladen, im Prinzip alles gleich gemacht – und da kamen sie richtig an.
Die Suche nach dem wesentlichen Unterschied hat mich etwas Zeit gekostet.
Ich hatte mir eigentlich relativ viel Mühe gegeben, auf der neuen Maschine alles durchgehend und sauber auf UTF-8 einzustellen, nach Ubuntu-Standard vorzugehen und alten Krempel auszumisten. Dabei habe ich eine Einstellung aus shell-Initialisierungsskripten rausgeworfen und sie dahin gepackt, wohin sie nach neueren Linux-Standards eignetlich gehören. Nach /etc/default/locale.
Dummerweise liest der ssh-Daemon diese Datei nicht ein, wenn man direkt per ssh Befehle ausführt. Baut man also sinngemäß etwas ähnliches wie
mysql_dump datenbank | ssh neue_maschine mysql datenbank
dann führt die neue Maschine mysql ganz ohne Environment aus und hält die Daten für latin1 oder irgendwas anderes, aber nicht UTF-8. Weil die neue Datenbank nun aber (aufgrund meiner default-Einstellungen und neuer Software-Version) sieht, dass man gerne UTF-8 hätte, die Eingabe aber nicht für UTF-8 hält (obwohl sie, PHP- und WordPress-Kuddelmuddel) schon UTF-8 waren, werden sie nochmal von latin1-nach UTF-8 gewandelt, und das sieht dann so aus, als würde man UTF-8 ausgeben aber als Zeichensatz Latin1 angeben. Tatsächlich aber sieht man nicht die zwei Byte von UTF-8-Umlauten in Latin1, sondern tatsächlich zwei UTF-8-Zeichen (insgesamt also 4 Byte).
Lösung des Problems: Datenbank nochmal kopieren und bei mysql –default-character-set=utf8 als Parameter mitgeben.
Das funktionierte einwandfrei beim Blog Forschungsmafia, weil ich da in letzer Zeit nicht mehr zum Schreiben gekommen bin und sich da deshalb nichts mehr änderte. Die konnte ich einfach überschreiben.
Problematischer war das beim Blog danisch.de, weil sich da seit dem Update wieder einiges an Artikeln und Kommentaren getan hatte. Die wollte ich nicht einfach wegschmeißen, indem ich die alte Datenbank nochmal reinpuste und alle Änderungen wegwerfe.
Lösung: Die alte Datenbank auf die oben beschriebene Weise in eine temporäre neue Datenbank überspielen und daraus mit
mysqldump --replace --no-create-db --no-create-info --default-character-set=utf8
Einen Dump erstellen, der keine drop-, keine create- und keine insert-Statements, sondern nur replace-Statements enthält, und den dann in die neue Datenbank reinpumpen, damit nur das (mit richtigen Zeichen) überschrieben wird, was schon vor dem Umzug da war und nicht zwischenzeitlich neu hinzugefügt wurde.
Bedeutet für mich aber auch, dass ich in den nächsten Tagen nochmal alle Artikel und Kommentare per Skript durchgehen muss, weil da immer noch ein paar Latin1 rumspuken und wie erwähnt auch andere Zeichensätze aus Spam-Kommentaren (russisch, japanisch,…)
26 Kommentare (RSS-Feed)
Jetzt nicht konkret nachgeschlagen. Es gibt irgendeinen Katalog von Einstellungen und Dateipfaden, auf den man sich mal geeinigt hat, und wenn ich mich recht erinnere (ist aber auch schon wieder Jahre her, dass ich da reingesehen habe), gehörten auch /etc/default/* dazu.
Kannst du das Skript dann als Open Source veröffentlichen, mit dem du die durchgehst?
> Kannst du das Skript dann als Open Source veröffentlichen, mit dem du die durchgehst?
Das Aufhübschen und Dokumentieren würde mehr Arbeit machen als das Skript selbst.
Wer braucht es?
/etc/default/* ist ein Debianismus. Nix “Linux Standard”
Mag sein. Ändert an der Situation trotzdem gar nichts.
ssh -t
Danke!
Kommt in meine kleine Help-Datei.
Basierend auf ‘cheat’:
https://github.com/chrisallenlane/cheat
https://github.com/chrisallenlane/cheat/blob/master/cheat/cheatsheets/mysql
Ich hatte desöfteren Umlaut-Probleme beim Portieren von WordPress-Blogs und XT:Commerce-Shops. Teilweise auch einfach beim Umsetzen von einer Test-Subdomain in eine “produktive” Umgebung.
[Ganz abgesehen davon, dass WordPress beim “woandershin-Setzen” ziemlich unbequem ist, weil viele Pfade in der Datenbank gespeichert werden und nicht bloß als Präfix in einer Config-Datei auftauchen … Naja …]
Irgendwann bin ich mal auf das Tool mySQLdumper gestoßen. Lädt große Datenbanken ohne TimeOuts ziemlich schnell und zuverlässig runter – und ebenso schnell wieder hoch.
Ist natürlich schon Jahre her. Trotzdem hatte ich seitdem derlei Probleme nicht mehr. Ich habe nicht ganz verstanden, was genau da im Code passiert – aber es hat echt immer geklappt.
Ich weiß jetzt nicht, ob der Dumper in Deiner Situation geholfen hätte, aber vielleicht findest Du da ja was?
“-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.”
Hmm …
MySQL? Haha. selbst schuld
http://grimoire.ca/mysql/choose-something-else
mit z.B. PostgreSQL wäre das nicht passiert 😛
@TomTom:
Ich persönlich bevorzuge auf meinen Rechnern Postres schon lange. Gefällt mir deutlich besser als MySQL.
Aber:
WordPress hat jahrelang nur mit MySQL funktioniert, und meines Wissens ist das auch heute nur mit Klimmzügen drin. Und Postgres war auch nicht immer so doll und in allen Distributionen unterstützt.
Bedenke, dass auf dem Server noch einiges anderes an Software läuft, was auf MySQL basiert. Mir wäre Postgres lieber gewesen, ging aber vom Aufwand her einfach nicht, zumal manches hätte komplett umgeschrieben werden müssen. Und zwei Datenbanken sind da einfach zu viel. Als reiner Besucher der Webseiten sagt sich das immer so leicht, was man tun sollte.
Glaub aber ja nicht, dass unter Postgres immer alles eitel Sonnenschein ist, da hab ich auch schon Turnereien erlebt. Und wenn WordPress/PHP Mist in die Datenbank schreiben, dann kann die Datenbank daran auch nichts ändern.
Hadmut, wenn Du soviel Ahnung hast, könntest Du dieses Blog
http://www.latein.at/phpBB/ wieder in Ordnung bringen?
es gibt da viele Altgriechisch-Probleme. Der Web Master kriegt es echt nicht auf die Reihe ….
@Brak: Wie soll ich denn das machen? Erstens habe ich da keine Admin-Rechte, zweitens komme ich mit meinen eigenen Sachen zeitlich schon nicht mehr rum, wie soll ich da noch fremde Seiten pflegen? (Klar, zum Freiberufler-Stundensatz ließe sich da was machen…)
Was schätzt Du, wieviel brauchst Du?
Keine Ahnung. Ich bin zwar multipel begabt, Hellsehen gehört aber nicht zu meinen am stärksten ausgeprägten Begabungen… (Zumal ich die Software nicht kenne, die, nebenbei bemerkt, ein Forum und kein Blog ist.)
Naja, ich würd schon was spenden, wenn Das problem behoben ist, aber ich will keine neues Loch, bzw, keine Baustelle eröffnen. Vielleicht redest Du mal mit dem Betreiber, das der Dir Info gibt. Der könnte mir dann ja auch eine Spendenbescheinigung ausstellen.
ich glaub, Marcus oder Martinus ist der Chef
http://www.latein.at/phpBB/viewtopic.php?f=26&t=26861
Da kannst Du unten auch gleich die Art der Probleme sehen. Im Archiv ist ganz viel, was früher altgriechisch war, jetzt unleserlich, indem lauter sowas dasteht:
¿á¼± Î³á½°Ï á¿¾Î•Î»Î»Î®Î½Ï‰Î½ λόγοι πολλοί τε καὶ γελοῖοι, ὡς á¼Î¼Î¿á½¶ φαίνονται, εἰσίν
> Vielleicht redest Du mal mit dem Betreiber, das der Dir Info gibt.
Warum? Was hab ich mit dem zu tun?
Es gibt Millionen von Webseiten, von denen vielleicht 98% irgendeine Macke haben. Soll ich jetzt losziehen und anderer Leute Webseiten aufräumen?
Das sieht mir ganz nach dem von Dir beschriebenen Zeichensatzproblem bei Systemumstellung aus…
Nein, aber der wird Dir genau sagen, was er nicht geregelt bekommt, und muß Dir ja schließlich die Zugangsrechte erteilen. Er hat mal in irgendeinem Posting gesagt, wenn wer jemand kennt, der die Probleme beseitigen würde …. zumal das Griechisch-Forum extrem drunter leidet. …. ich bin ja auch bloß einfacher User
> Nein, aber der wird Dir genau sagen, was er nicht geregelt bekommt,
Es interessiert mich aber eigentlich überhaupt nicht. Ich will’s gar nicht wissen.
Hier hast Du aber die gegenteilige Meinung geäußert:
(Klar, zum Freiberufler-Stundensatz ließe sich da was machen…)
@Brak: Meine Anschrift findest Du im Impressum. Schreib einen Auftrag mit Stundensatz und Umfang, und ich werde sehen, ob ich ihn annehme. Rechnung gibt es dann mit ausgewiesener Mehrwertsteuer. Ansonsten habe ich nicht die geringste Motivation, fremde Webseiten, die ich nicht kenne und die mich nicht interessieren, zu reparieren, insbesondere, wenn an meiner eigenen noch so viel zu tun ist.
Ich werde mich mal mit Martinus in Verbindung setzen und der wird sich dann melden .. Okay.
Naja, aber ich dachte, du wirst so über den Umfang so ne grobe Schätzung ? x ???? abgeben können …. aus Erfahrung …
? x ???? das stan Pi x daumen mit emoticons ….
@pufaxx
Auch ich kann MySQLDumper zur Datenbanksicherung und Wiederherstellung nur empfehlen. Verwende das Programm seit über 10 Jahren und habe damit schon einige Serverumzüge und Programmupdates gemeistert. Auch über verschiedene Plattformen (unterschiedliche Linuxe und verschiedene Windowsversionen). MySQLDumper verschickt die Dumps per FTP direkt zu mir nach Hause:-)
„… neueren Linux-Standards eignetlich gehören. Nach /etc/default/locale.“
Wo hast du das nachgeschlagen?