echo $begrüßung;
Also wenn ich jedes Mal mysql_query("SET NAMES utf8"); absetze wird alles korrekt angezeigt. Auch die alten Beiträge. Gibt es denn eine Möglichkeit den MySQL-Server auf utf-8 umzustellen?
Ja. Die von mir verlinkte Handbuchseite sagt, dass für die Client-Kommunikation die Werte character_set_client, character_set_results und character_set_connection wichtig sind. (Weitere character_set_*-Werte wirken als Default-Werte an anderen Stellen. Dazu wäres es sicher nicht verkehrt, auch mindestens noch die vorangehenden Kapitel zu lesen.
Mein Server läuft mit den Einstellungen
character-set-server = utf8
default-character-set = utf8
Solltest du noch Datenbankdateien verwenden, die unter MySQL Version 4.0 oder früher angelegt wurden, ist es wichtig, vor dem Umstellen des o.g. Defaultwertes durch alle diese Datenbanken, Tabellen und Stringfelder zu gehen und einmal die Zeichenkodierungseinstellung zu ändern. Es reicht dabei auch, die Zeichenkodierung beizubehalten und nur den Wert für die Kollation (sprich: die Sprachangabe) zu ändern. Man kann den Wert auch gleich wieder zurücksetzen. Sinn der Übung ist, dass MySQL dabei die Information zur verwendeten Kodierung in die Datenbank/Tabellendatei schreibt. Ansonsten nimmt es die Default-Kodierung des Systems an, was dann beim Auslesen für die nächsten Probleme sorgen würde.
Geht das nicht bei vielen Usern auf die Performance?
Apropos User. Wissen denn alle auf die Datenbank zugreifenden Clients, dass nach der Umstellung nun UTF-8-kodierte Daten auf sie zukommen und von ihnen erwartet werden? Es wäre sonst sinnvoll, die Defaulteinstellung wenigstens der drei oben genannten verbindungsrelevanten Werte auf latin1 zu belassen, damit latin1-Clients, die nicht mit SET NAMES nachgerüstet werden können, weiterhin ordnungsgemäß funktionieren. Leider zeigte sich MySQL in der Vergangenheit bei mir nicht sehr kooperativ, diese drei Werte in der my.cnf verstehen zu wollen. Es gelang mir nur, mittels
init-connect = "SET NAMES latin1"
die Default-Einstellung zur Client-Kommunikation auf latin1 zu bringen, wenn der Server ansonsten per Default auf utf8 stehen soll.
Ein SET NAMES ist nur einmal nach dem Verbindungsaufbau erforderlich. Die dabei benötigte Zeit dürfte nicht sehr bedeutend sein. Sollte der Server vorher schon an der Kot^WGrenze seiner Leistungsfähigkeit arbeiten, wäre sicher mit einer Optimierung der echte Daten abfragenden Statements mehr rauszuholen, als die SET NAMES verbrauchen.
echo "$verabschiedung $name";