wordpress kollation umstellung

nachdem wir unsere datenbank auf mysql5 aktualisiert haben wurden bei uns bei sämtlichen wordpress installationen auf dem server alle sonderzeichen und umlaute falsch angezeigt. das lag zum einen an der von mir noch nie so perfekt durchgezogenen umstellung auf uft-8 (ab wordpress version irgendwas wird standartmäßig UTF-8 anstelle der ISO-8859-1 benutzt).
ich hatte bisher immer die mühe gescheut mich mit dem thema kollationen, utf und iso schlagmichtot auseinander zu setzen. aber da jetzt auch webseiten von kunden betroffen waren, wurde es höchste zeit.
direkt wordpress themes runterladen
nachdem die datenbank von version 4 auf mysql 5 gebracht wurde, zeigte sich auf den wordpress blogs ein kritisches bild. alle umlaute und sonderzeichen wurden falsch dargestellt. das lag vor allem an der kollation der datenbank tabelle “latin1_swedish_ci”. leider bin ich mir nicht sicher ob sich durch das update der mysql datenbank die kollation geändert hat, aber fakt ist: vorher wurde alles korrekt angezeigt.
ich habe daher folgende schritte zur lösung durchgeführt:
ich setzte jetzt einfach voraus das ihr alle anderen einstellungen auf UFT-8 stehen habt. in der wp-config.php, als meta tag im template und in den wordpress einstellungen (einstellungen > lesen > “Zeichensatz für Seiten und Feeds”) kann man den zeichensatz einstellen. in meinem blog steht alles auf UFT-8. ich hatte erst daran gedacht den blog wieder zurück in das altbewährte ISO-8859-1 zu bringen. ich halte den internationalen utf-8 standart für zukünftige unternehmungen für sicherer.
mysql tabellen kollation ändern
als erstes habe ich die tabellen auf “latin1_german1_ci” gestellt. das kann man zum beispiel mit phpMyAdmin machen indem man sich die tabelle anzeigen läßt und dann auf “operationen” im oberen menu klickt. hier kann man relativ weit unten die kollation einstellen und mit dem OK knopf bestätigen. das fürt man für alle tabellen des wordpress blogs durch.

umlaute und sonderzeichen konvertieren
es gibt ein paar plugins und php scripte die diesen job erledigen sollten, aber leider hat dabei keins bei mir funktioniert. also habe ich die korrekturen per hand durch geführt. dazu kann man wieder mit phpMyAdmin arbeiten:
ihr seid natürlich in der richtigen datenbank eingeloggt. jetzt klickt ihr oben auf SQL (es spielt keine rolle welche tabelle ihr zuletzt ausgewählt habt) und löscht in dem feld “SQL-Befehl(e) in Datenbank *db name* ausführenDokumentation” den vorab eingetragenen befehl und führt folgenden aus:
update kzt_posts set post_content = replace( post_content,’ü’,'ü’);

die variablen dazu sind einfach erklärt: kzt_posts ist die tabelle an der änderungen gemacht werden sollen und post_content das entsprechende textfeld. in anderen tabellen stehen die zu ändernden informationen natürlich in einem anderen textfeld. ihr werdet die namen dazu sicher sofrt erkennen wenn ihr euch die entsprechende tabelle anseht. am ende des befehls stehen die werte die gesucht und gegen welchen wert sie ausgetauscht werden sollen. eine entsprechende tabelle habe ich weiter unten angefügt.
klickt man auf OK, werden alle werte geändert und wir erhalten eine meldung wie oft der wert in der datenbank korrigiert wurde.
die folgenden umlaute können dabei in eurer datenbank vorkommen. je nachdem ob ihr schon mit SO-8859-1 gearbeitet habt, können da recht wilde sonderzeichenkombinationen herauskommen:
|
ü
|
ü
|
Ü
|
Ü
|
|
ä
|
ä
|
Ä
|
Ä
|
|
ö
|
ö
|
Ö
|
Ö
|
|
ß
|
ß
|
Ë
|
é
|
man könnte natürlich auch einen langen befehl in die SQL aufforderung schreiben, aber dann versteht ja wieder niemand was man dort macht

März 7th, 2008 at 14:45
Sehr schöner Artikel! Absolut empfehlenswert!
April 23rd, 2008 at 17:28
Vielen Dank für diesen Artikel, er hat mir heute sehr geholfen!
Ich hatte auch das Problem, daß nach einem nächtlichen Serverumzug und gleichzeitigen MySQL-Upgrade die Sonderzeichen/Umlaute in einer WP-Datenbank durcheinandergeraten waren.
Aber dank des Tutorials funzt wieder alles
Danke!
Mai 15th, 2008 at 22:23
Nach 2 Tagen suchen, hat mir Deine Anleitung endlich weitergeholfen!
Scheinbar hat mein Provider ebenfalls ein Update auf MySQL5 am Wochenende gefahren…
Vielen Dank!
Mai 22nd, 2008 at 21:18
Habe soweit alles ausgeführt aber wenn ich nun bei mir auf Datenklicke dann auf sql und den Befehl
update kzt_posts set post_content = replace( post_content,’ü’,’ü’);
erscheinte eine fehlermeldung
es würden ” fehelne die eingesetzt heist es
wp posts existiert nicht.
u.s.w
nach stundenlangen rumfummeln kommt irg wann
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’set post_content =” replace(post_content,’ü’,’ü’)’ at line 1
hast du vielleicht icq und die tage mal zeit?
würden dich auch als dank auf der hp verlinken
Juli 24th, 2008 at 08:57
Sehr geil…
hat mir viel Arbeit erspart. Herzlichen Dank.
Gruß
Udo
August 22nd, 2008 at 13:33
[...] Suchen und Ersetzen) umwandeln muss? Gute Frage, ü ist z.B ü und ß steht für ß usw. Auf konzentrat.org gibt es eine vollständigere Liste. Dort wird auch beschrieben, wie man im PHPMyAdmin anstatt im [...]
August 24th, 2008 at 22:05
@ Thorsten
ersetze die ’ durch ‘
@ Topic
Es gibt leider noch weit mehr als öäüßÖÄÜË und mein Dilemma ist: wie finde ich all die Zeichen, von denen ich nichts weiß?
August 24th, 2008 at 22:07
Hmm, WordPress ersetzt mir hier im Kommentar leider den einzelnen Hochkommata durch dieses andere Ding, dessen Namen ich nicht kenne. Thorsten, nimm das Hochkommata azf deiner Kanalgitter-Taste.
September 17th, 2008 at 00:26
Hallo,
erst mal ein Lob für diese Anleitung.
habe mich an die Anleitung gehalten,
allerdings war und ist in meiner wp-config.php kein UTF-8-Vermerk. Dafür in Wordpress eingestellt unter -> lesen.
Ich bin so vorgegangen wie du es beschrieben hast kann nun aber post_content
und post_name
nicht auf german ändern..
auf die Änderung:
ALTER TABLE `wp_posts` CHANGE `post_content` `post_content` LONGTEXT CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL
kommt diese Fehlermeldung:
MySQL meldet: Dokumentation
#1283 – Column ‘post_content’ cannot be part of FULLTEXT index
Ich weiß nicht so recht weiter.. Was ich nun als Notlösung machen wollte:
das ganze über phpmyadmin zu dumpen dann die einträge per Hand zu machen in UTF-8 umzuwandeln /Ändern; dann in Wordpress über wp-config.php und header.php Einträge auf UTF-8 zu stellen und dann wieder den Dump einzuspielen.
Mit behagt es allerdings nicht so ganz, weißt du vielleicht noch eine Lösung zu meinem Problem bevor ich diese o.g. Notlösung starte=?
Vielen Dank im Vorraus,
Daniel
Oktober 6th, 2008 at 20:31
Hallo,
habe das Problem aktuell auch.
Wenn ich die Kollation von swedish… auf utf-8 ändere – welches utf-8 muss ich denn dann nehmen? utf8_bin, utf88_unicode_ci oder utf8_general_ci?
Ansonsten finde ich die Beschreibung sehr gut.
Grüße
andi
Oktober 6th, 2008 at 20:33
one more thing …
Mir ist aufgefallen, dass du ja von latin1_german1_ci schreibst und nicht von utf8.
Hatte das erst so verstanden, als ob man utf8 nehmen müsste. Was ist denn jetzt richtig?
Oktober 7th, 2008 at 02:14
bei uns steht es auf utf8_general_ci aber im prinzip sollten die anderen auch funktionieren. stell es einach mal um und korrigiere einen eintrag in der db
November 4th, 2008 at 11:28
[...] the wordpress community, I found out. The nicest tutorial about how to fix the errors, I found on konzentrat.org: Change wp-config.php and wordpress settings to UTF-8; Change all the database tables to [...]
November 12th, 2008 at 20:03
[...] empfehlen kann ich das Vorgehen von Perun oder kONZENTRAT.org die Zeichen per Suchen und Ersetzen auszutauschen, da sich die kaputten Zeichen u.U. nicht auf die [...]
Dezember 11th, 2008 at 10:50
[...] Besten Dank für diesen Hinweis an Konzentrat.org [...]
Dezember 18th, 2008 at 07:29
Ärgerlich ich bekomme eine Fehlermeldung wegen nicht geschlossener Anführungszeichen, obwohl ich den Replace-String per Copy and Paste übernommen habe – schaust du da nochmal drüber oder erwähnst, ob man da irgendwo Backticks nehmen muss?
Danke vorab.
Dezember 18th, 2008 at 07:52
Okay, habe es gefunden:
UPDATE `wp_posts` SET post_content = replace(post_content, “ü”, “ü”);