Hi!
Wenn ich Spalten abfrage, welche Umlaute enthalten, meldet mysql einen Fehler à la "Unknown column 'Durchführung_Abt' in 'field list'". Auch sonst werden Sonderzeichen aus der Datenbank in der Webseite falsch dargestellt.
Siehe SELFHTML-Wiki Themen:Zeichencodierung/MySQL.
In der Webseite verwende ich iso-8859-1/latin1. Die mysql Variablen mit phpMyAdmin abgefragt sehen so aus:
character set client utf8
(Globaler Wert) latin1
[...]
Wenn du auf deiner eigenen Verbindung keine Aushandlung der zu verwendenden Zeichenkodierung vorgenommen hast, gilt der globale Wert. Die anderen Werte der Auflistung gelten für die Sitzung des phpMyAdmin, sind also für deine Sitzungen nicht relevant.
Es fällt mir auf, dass 3mal utf8 statt dem globalen latin1 aktiv ist. Ich bin mir jetzt nur nicht sicher, ob dies nur in phpMyAdmin der Fall ist, vor allem, weil die Zeichen dort auch nicht korrekt angezeigt werden (was für mich aber nicht so schlimm ist). Was muss ich unternehmen, damit dann auch in phpMyAdmin die Ausgabe korrekt ist?
Das sieht sehr danach aus, als ob jemand UTF-8-kodierte Daten übergeben hat, die Verbindungskodierung aber auf Latin1 eingestellt war. Damit konnte MySQL die Daten des SQL-Statements nicht richtig interpretieren und konnte die Daten nicht der Feldkodierung entsprechend ablegen (und gegebenenfalls dafür umkodieren, wenn die Feldkodierung nicht der Verbindungskodierung entspricht). Im Allgemeinen kann man davon ausgehen, dass der PMA alles richtig macht. Wenn er da was falsches anzeigt, dann sind die Daten fehlerhaft. Wenn du also für alle Systeme, die sich die Verbindungskodierung ordentlich aushandeln, richtige Ergebnisse sehen willst, musst du deinen Datenbestand korrigieren.
Nach Konsulatation der MySql Referenz habe ich versucht die character_set_client und character_set_results auf latin1 zu stellen. Ich habe in phpMyAdmin "SET NAMES 'latin1';" und "SET character_set_client=latin1; SET character_set_results=latin1;" ausprobiert. Das hatte aber keine Wirkung, phpMyAdmin ist jeweils ohne Meldung zum Startbildschirm gesprungen und die Variablen hatten nach wie vor ihren alten Wert.
Das sind sessionindividuelle Werte, die mit dem Session-Ende auch keine weitere Existenzberechtigung haben. Sie mit dem PMA abzusetzen hat keinen Sinn, weil ihre Auswirkungen gleich wieder entschwinden.
Auch ein "mysql_query("SET NAMES 'latin1'");" in meiner php-Datei hat nichts bewirkt.
Das tut nur dann das Richtige, wenn du korrekt kodierte Daten im DBMS hast beziehungswiese solche hinschickt.
Meine Fragen sind nun: Was ist wirklich die Ursache meines Sonderzeichenproblems? Liegt es an den Einstellungen für die Zeichensätze in HTML/PHP/mysql/Apache? Warum lassen sich die Einstellungsvariablen von mysql nicht verändern?
Diese Fragen lass ich mal unbeantwortet, weil sie hoffentlich im verlinkten Artikel zu finden sind oder durch meine obigen Ausführungen schon geklärt wurden. Wenn nicht, frag einfach noch mal, beziehungsweise das was jetzt noch unklar ist.
Lo!