echo $begrüßung;
Mit SET NAMES UTF8 wird es nun korrekt in der Datenbank gespeichert.
Das heißt also, der phpMyAdmin zeigt die Umlaute der neu hinzugefügten Daten richtig an. Die Umlaute der bereits gespeicherten Daten müssten erst korrigiert werden, bevor du neue Daten einspielst. Sie reparieren sich nicht automatisch, nur weil du jetzt SET NAMES verwendest.
Aber der Browser gibt mir (um bei dem Beispiel zu bleiben) anstatt eines »ö« leider »�« aus.
Führst du SET NAMES nach jedem Verbindungsaufbau durch?
Dass heißt ja nun, das doch mit der Kodierung meines Dokumentes etwas nicht stimmt. Daraufhin habe ich das Dokument zeitweise auf ISO Latin 1 (ISO-8859-1) umgestellt. Dann werden die Inhalte aus der datenbank korrekt dargestellt, die statischen Inhalte der Seite, jedoch nicht, weil die Umlaute hart-kodiert (ohne HTML-Entities) in dem Dokument stehen.
Deine Seite scheint korrekt UTF-8-kodiert zu sein. Die eingefügten Daten aus der Datenbank sind aber gemäß Latin1/ISO-8859-1 kodiert. Du wirst sie an irgendeiner Stelle in dieser Kodierung geliefert bekommen.
Für die Kodierung der Feldinhalte ist allein die eingestellte Kodierung des jeweiligen Feldes interessant. Tabellen- und Datenbank-Werte sind nur Defaultangaben für neue Felder und Tabellen. Für die Datenübertragung von und zum Client gibt es die drei mit SET NAMES einstellbaren Konfigurationswerte. Ist Feld- und Verbindungskodierung unterschiedlich, nimmt MySQL beim Schreiben oder Lesen eine Umkodierung vor, soweit das technisch möglich ist (in der Zielkodierung das Zeichen dargestellt werden kann).
Ich verstehe das nicht. Was läuft hier falsch?
Ich vermute, du hast im auslesenden Script SET NAMES vergessen, und MySQL hat als Default-Wert Latin1 eingestellt.
echo "$verabschiedung $name";