dedlfix: MYSQL: Deutsche Kollation mit Zeichensatz utf8?

Beitrag lesen

Hi!

Stell die Verbindungskodierung ein, dann kann MySQL richtig arbeiten.
Mit folgender Einstellung:
mysql_query('SET NAMES ISO-8859-1', $dbconnect);
werden die Zeichen korrekt angezeigt. Die Sortierung ist aber immer noch falsch.

Das kann auch eine Verkettung von mehreren Fehlern sein. Du schaust dir sicher nicht die vom DBMS empfangenen Bytes direkt an, sondern schickst sie an einen Browser. Auch hier muss die Zeichenkodierung korrekt mitgeteilt werden. Nicht dass da nur zufällig was gewolltes rauskommt. Aber lassen wir mal diese Baustelle beiseite und betrachten nur den MySQL-Teil: Wie hattest du die Verbindungskodierung eingestellt, als du die Daten eingetragen lassen hast?

ISO-8859-1 ist kein gültiger Wert für SET NAMES. Das ergibt nur eine Fehlermeldung, wenn du sie auswerten würdest. Latin1 (auch kleingeschrieben) wäre richtig.

Mit mysql_query('SET NAMES utf8', $dbconnect); werden die Zeichen nicht korrekt angezeigt und die Sortierung ist auch falsch.

Betrachte das was MySQL sendet direkt, indem du die Daten echo urlencode($feldinhalt); ausgibst. Dann siehst du, was du geliefert bekommst. Wenn du latin1 einstellst, musst du pro Umlaut einmal %xx bekommen. Wenn du das zweimal bekommst, hat MySQL falsche kodierte Daten im Bauch. Bei UTF-8 müssen pro Umlauf zwei %xx-Sequenzen kommen. Wenn du ein Fragezeichen oder vier Sequenzen bekommst, ist wieder was falsch.

Eine grundsätzliche Frage: Mit mysql_query('SET NAMES utf8', $dbconnect); lege ich doch fest, welche Kodierung zu Grunde gelegt wird, wenn ein Client mit dem Server agiert.

Ja. Wenn diese Kodierung aber nicht mit der Feldkodierung übereinstimmt, kodiert MySQL die Daten entsprechend um.

Eine Abfrage wie
SELECT vorname, nachname [...]
hat nun keine Umlaute, d.h. der Mysql-Server wird die Anfrage verstehen und ausführen und dann nur noch auf interne Parameter zurückgreifen, nämlich, um zu sortieren. Dann schickt er sie zurück, dann kann eine fehlerhafte Verbindungskodierung dafür sorgen, dass die Daten nicht richtig angezeigt werden. Aber auch, dass sie nicht richtig sortiert sind?

Nein. Zur richtigen Sortierung müssen sie richtig gespeichert sein und dazu vorher richtig kodiert und ausgehandelt gesendet worden sein.

Lo!