dedlfix: MySQL UTF8 für Sonderzeichen?

Beitrag lesen

echo $begrüßung;

Ich habe gelesen, dass mit UTF8 alle existierenden Zeichen darstellbar sind, nur reicht es einfach die Datenbank darauf umzustellen?

Nicht ganz. Die Datenbank ist nur ein Teil des komplexen Gebildes, das mitspielen muss, damit alle Zeichen so ankommen, wie es gedacht ist.

Wenn ich die Informationen von phpmyadmin richtig interpretiere, ist sie momentan auf latin1_german2_ci eingestellt. Reicht es hier einfach auf utf8_unicode_ci umzustellen, oder ruiniere ich mir dann damit die ganze Datenbank?

Es gibt verschiedene Stellen, an denen Zeichensatz- und Sortierungsangaben (Characterset and Collation) eingestellt werden können. Neben der Default-Einstellung des gesamten DB-Servers, auf die du vermutlich keinen Einfluss haben wirst, gibt es Einstellmöglichkeiten pro Datenbank, pro Tabelle und pro String-Feld. Da das Thema recht komplex ist, empfiehlt sich die Lektüre des MySQL-Handbuchkapitels Character Set Support. Die Einstellungen in den höheren Ebenen dienen unter Anderem als Default-Wert beim Neuanlegen darunter liegender Elemente. Für deine Daten ist letzlich die Angabe zu den einzelnen Feldern wichtig.
Unter der Voraussetzung, dass die bisherige Angabe mit der tatsächlichen Kodierung deiner Daten übereinstimmt, reicht es, die Angabe mit dem phpMyAdmin zu ändern. phpMyAdmin sendet daraufhin einen "ALTER TABLE ... irgendwas mit CHARSET" zur DB. Damit werden die vorhandenen Daten in die neue Kodierung umgewandelt.

Es wäre nett, wenn mir jemand eine Hilfestellung geben könnte, was ich genau beachten muss um alles au UTF8 zu ändern. Also sowohl in der DB als auch möglicherweise schon bei der Eingabe der Daten.

Weiterhin ist auch noch zu beachten, dass bei der Kommunikation zwischen Client und Datenbank beiden Seiten die verwendete Zeichenkodierung bekannt sein muss, und sich beide daran halten müssen. Kommen die Daten UTF-8-kodiert und der Server erwartet latin1 gibt es Datenverlust.
Wenn der Server per Default auf latin1 eingestellt ist, erwartet er die Daten und sendet die Abfrageergebnisse ebenfalls als latin1. Ist der Zeichensatz der Felder ein anderer als der, der bei der Kommunikation verwendet wird, versucht MySQL zwischen beiden zu übersetzen, was aber nicht in jedem Fall - prinzipbedingt - verlustfrei funktioniert. Deswegen wäre es angebracht ebenfalls UTF-8 bei der Clientkommunikation zu verwenden. Dies teilt man dem Server mittels  SET NAMES utf8  direkt nach dem Verbindungsaufbau mit.

Damit klappt die Kommunikation mit dem DB-Server. Das ist aber nur die halbe Miete, den die Verarbeitung mit PHP (oder womit auch immer) und die Kommunikation zum Browser muss auch beachten, dass die Daten UTF-8-kodiert sind. Die String-Funktionen von PHP könenn noch nicht richtig mit UTF-8 umgehen. Eine Verarbeitung mit PHP ist also nur eingeschränkt möglich. Das reine Durchreichen an den Browser geht aber ohne Probleme. Um dem Browser mitzuteilen, dass ihn UTF-8-kodierte Daten erwarten muss im HTTP-Header "Content-Type" eine charset-Angabe notiert sein (siehe PHP-Funtktion header()). Ist diese nicht vorhanden, nimmt sie der Browser auch aus einem gleichnamigen Meta-Element.
Selbstverständlich müssen nicht nur die Daten aus der Datenbank sondern auch die restlichen zum Broser gesendeten Texte UTF-8-kodiert sein. Du musst also auch noch die vorhandenen Scripte als UTF-8 speichern und einen Editor verwenden, der damit umgehen kann.

echo "$verabschiedung $name";