echo $begrüßung;
Dabei liefert
SELECT CONVERT(field
USING utf8),field
bzw. um es noch mehr zu verdeutlichen
SELECT CONVERT(field
USING utf8), CONVERT(field
USING latin1)
zwei identische Felder. Und wenn ich es dann auf eine utf8 codierte html Seite ausgebe erscheint m?ller, was also darauf hindeutet, das nichts konvertiert wurde, sondern latin1 geblieben ist.
Das ist eine falsche Schlussfolgerung. Die Konvertierung hat sehr wohl stattgefunden, wirkte jedoch erst einmal nur intern. Diese händische Kodierung ist eigentlich nur dann sinnvoll, wenn man Felder/Werte mit unterschiedlicher Kodierung gemeinsam verarbeiten möchte.
Woran könnte das liegen und wie kann man das beheben?
Wenn Daten zum Client ausgegeben werden, dann wird die berechnete Ergebnismenge gemäß character_set_results kodiert und dann erst übertragen. Stelle für die Clientverbindung eine von dir gewünschte Kodierung ein (Stichwort: SET NAMES), dann bekommst du die Daten in dieser geliefert. Es ist dabei egal, in welcher Kodierung die Daten in den Datenbanken/Tabellen/Feldern abgelegt sind, die Kodierung wird automatisch vorgenommen. Voraussetzung, dass es dabei nicht zu Fehlern kommt, ist eine richtige Einstellung der Kodierungsangabe der (String-)Felder (und dass die Daten nicht bereits durch andere Unachtsamkeiten unbrauchbar geworden sind.)
dringende Literaturempfehlung: Kapitel Character Set Support im MySQL-Handbuch der Version 4.1 und höher.
echo "$verabschiedung $name";