Hadmut Danisch

Ansichten eines Informatikers

Umlaute korrigiert

Hadmut
29.3.2015 20:26

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)

Uwe
29.3.2015 21:38
Kommentarlink

„… neueren Linux-Standards eignetlich gehören. Nach /etc/default/locale.“

Wo hast du das nachgeschlagen?


Hadmut
29.3.2015 21:45
Kommentarlink

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.


Reinhard
29.3.2015 21:52
Kommentarlink

Kannst du das Skript dann als Open Source veröffentlichen, mit dem du die durchgehst?


Hadmut
29.3.2015 22:21
Kommentarlink

> 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?


Arno Nym
29.3.2015 22:15
Kommentarlink

/etc/default/* ist ein Debianismus. Nix “Linux Standard”


Hadmut
29.3.2015 22:20
Kommentarlink

Mag sein. Ändert an der Situation trotzdem gar nichts.


Marc
29.3.2015 22:40
Kommentarlink

ssh -t


rleo
29.3.2015 23:01
Kommentarlink

pufaxx
29.3.2015 23:27
Kommentarlink

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?


Jens
30.3.2015 0:20
Kommentarlink

“-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 …


TomTom
30.3.2015 0:23
Kommentarlink

MySQL? Haha. selbst schuld
http://grimoire.ca/mysql/choose-something-else

mit z.B. PostgreSQL wäre das nicht passiert 😛


Hadmut
30.3.2015 0:34
Kommentarlink

@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.


Brak
30.3.2015 10:14
Kommentarlink

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 ….


Hadmut
30.3.2015 10:37
Kommentarlink

@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…)


Brak
30.3.2015 10:56
Kommentarlink

Was schätzt Du, wieviel brauchst Du?


Hadmut
30.3.2015 10:57
Kommentarlink

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.)


Brak
30.3.2015 11:13
Kommentarlink

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:

¿á¼± γὰρ ῾Ελλήνων λόγοι πολλοί τε καὶ γελοῖοι, ὡς ἐμοὶ φαίνονται, εἰσίν


Hadmut
30.3.2015 11:18
Kommentarlink

> 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?


Brak
30.3.2015 11:14
Kommentarlink

Das sieht mir ganz nach dem von Dir beschriebenen Zeichensatzproblem bei Systemumstellung aus…


Brak
30.3.2015 11:30
Kommentarlink

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


Hadmut
30.3.2015 11:35
Kommentarlink

> 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.


Brak
30.3.2015 11:38
Kommentarlink

Hier hast Du aber die gegenteilige Meinung geäußert:

(Klar, zum Freiberufler-Stundensatz ließe sich da was machen…)


Hadmut
30.3.2015 11:45
Kommentarlink

@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.


Brak
30.3.2015 12:26
Kommentarlink

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 …


Brak
30.3.2015 12:26
Kommentarlink

? x ???? das stan Pi x daumen mit emoticons ….


Rainer
31.3.2015 11:30
Kommentarlink

@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:-)