Dann bin ich mit meinem Latein am Ende. Da ist irgendwas, was mir grad nicht einfällt, was es sein könnte. Denn es passt nicht zusammen, wenn der Client UTF-8 sendet, MySQL aber Latin1 annimmt und der phpMyAdmin trotzdem die Umlaute richtig anzeigen kann.
Ich habe mir die Seiteninformationen vom phpmyadmin, den "alten" Seiten und des neuen Moduls anzeigen lassen:
PhpMyAdmin und das neue Modul verwenden als Charset UTF8, meine alten Seiten ISO-8859-1.
mysqli_query($this->link,"SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'") or die(db::error($this->link)); mysqli_set_charset($this->link,"utf8") or die(db::error($this->link));
>
> Die erste Zeile ist nutzlos, weil alle Werte von der zweiten Zeile wieder überschrieben werden.
>
Ich hatte auch erst nur die erste Zeile und anschließend die 2. Zeile hinzugenommen.
> Und wenn es keine Auswirkungen hat, müsste eigentlich die Default-Kodierung bereits UTF-8 sein. Das passt dann aber nicht zu deinen alten Programmteilen.
Die alten Programmteile nehmen auch keinen Zugriff auf die neue DB, daher hat es wohl keine Auswirkung. In den alten Programmteilen wird auf jeder Seite explizit das Charset ISO-8859-1 gesetzt.
>
> Du kannst mal, ohne die Kodierung selbst zu setzen, SHOW VARIABLES LIKE 'char%' als Abfrage starten und dann das Ergebnis ganz normal fetchen und ausgeben:
>
> ~~~php
// ggf. $this->link anpassen und für $result und $row andere Namen nehmen, wenn sie mit vorhandenen kollidieren
> $result = mysqli_query($this->link, "SHOW VARIABLES LIKE 'char%'");
> while ($row = mysqli_fetch_assoc($result))
> print_r($row);
Das mal direkt nach dem Verbindungsaufbau und einmal kurz vor (oder nach) der/einer Abfrage, die korrekte Daten anzeigt.
Das funktioniert leider nicht so richtig, da die Anzeige direkt beim Verbindungsaufbau direkt wieder überschrieben wird. Zu schnell, um mittels Screenshot zu reagieren oder etwas zu lesen.
Beim Einfügen der Zeilen unmittelbar vor oder nach der Abfrage wird gar nichts ausgegeben (oder direkt wieder überschrieben). Oder ich habe nicht die richtigen Stellen gefunden.