echo $begrüßung;
Vorher war die Datenbank auf Latin1_swedish eingestellt die tabelle auf latin1_german_cs und die einzelnen Felder auf utf8 da ist klar das unterwegs was schief gehen muß.
Nein, das ist nicht die Ursache. Die Datenbankeinstellung ist ein Defaultwert für neu erstellte Tabellen, wenn dabei keine Kodierungs-/Kollationsangabe gemacht wurde. Der Tabellenkonfigurationswert wiederum ist ein Default-Wert für neu erstellte Felder, wenn bei deren Anlegen keine Kodierungsangabe gemacht wurde. Wenn das Feld einmal existiert, ist allein dessen konfigurierter Wert ausschlaggebend.
[...] solange es geht werde ich erstmal nichts dran ändern falls doch was passiert mache ich noch mysql_set_charset= dazu.
Wichtig für die Kommunikation mit den einzelnen Clients ist die Kodierung, die individuell auf jeder Verbindung ausgehandelt werden kann. Wird das nicht gemacht, und die Default-Einstellung steht beispielsweise auf Latin1, dann nimmt das DBMS an, dass es Latin1-Daten bekommt. Schickst du nun UTF-8, so sieht erstmal alles problemlos aus, aber in den Feldern landen nun doppelt UTF-8-kodierte Daten. MySQL geht davon aus, dass es Latin1-kodierte Daten bekommt. Es betrachtet die Bytes der UTF-8-Sequenzen als einzelne Latin1-Zeichen und kodiert diese nach UTF-8 um, um sie in den Feldern abzulegen. Rückwärts kodiert es die doppelt UTF-8-kodierten Daten wieder nach Latin1 zurück, du interpretierst sie als UTF-8 und denkst, dass alles i.O. ist. Probleme bekommst du erst dann, wenn du Hilfsmittel wie phpMyAdmin verwenden willst oder Stringfunktionen des DBMS wie Sortierung und Zeichenzählung anwenden willst.
Es ist also neben der Feldkodierungskonfiguration wichtig, die Verbindungskodierung einzustellen.
echo "$verabschiedung $name";