FYI: (Lösung) mysql-Probleme mit Umlauten
Verfasst: 15.01.2004 16:39
Dieser Beitrag ist als zukünftige Referenz gedacht.
Bei dem Umzug auf einen Managed-Server von 1und1 gab es Probleme bei der richtigen Nutzung von Umlauten.
Symptom: Obwohl Umlaute richtig gespeichert und richtig angezeigt wurden, wurden bei Vergleichen (z.B. mit LIKE), Umlaute und Vokale gleich behandelt. u=ü, ä=a, ö=o.
Folgen: Wenn also verschiedene User (fast) den gleichen Namen hatten, der sich nur durch Umlaute unterschied, bspw.: "Munster und Münster", konnte sich der zweite User nicht mehr anmelden, man konnte auch nicht mehr sein Profil editieren usw..
Test: Um zu überprüfen ob man das Problem hat, kann man folgende Abfragen ausführen. Als Ergebnis sollte nur eine Zeile angezeigt werden, werden beide angezeigt, dann ist man vom Problem betroffen:
Workaround: Man erzwingt einen BINARY Verlgleich bei jeder Abfrage, oder (natürlich leichter) man ändert das Attribut der Spalte "username" in BINARY. Letzteres geht mit folgender Abfrage:
Nebenwirkung: Die Eingabe von Usernamen unterscheidet nun auch noch nach Groß- und Kleinschreibung.
Bei dem Umzug auf einen Managed-Server von 1und1 gab es Probleme bei der richtigen Nutzung von Umlauten.
Symptom: Obwohl Umlaute richtig gespeichert und richtig angezeigt wurden, wurden bei Vergleichen (z.B. mit LIKE), Umlaute und Vokale gleich behandelt. u=ü, ä=a, ö=o.
Folgen: Wenn also verschiedene User (fast) den gleichen Namen hatten, der sich nur durch Umlaute unterschied, bspw.: "Munster und Münster", konnte sich der zweite User nicht mehr anmelden, man konnte auch nicht mehr sein Profil editieren usw..
Test: Um zu überprüfen ob man das Problem hat, kann man folgende Abfragen ausführen. Als Ergebnis sollte nur eine Zeile angezeigt werden, werden beide angezeigt, dann ist man vom Problem betroffen:
Code: Alles auswählen
CREATE TABLE `test` (
`name` VARCHAR( 10 ) NOT NULL
);
INSERT INTO `test` ( `name` ) VALUES ('Munster');
INSERT INTO `test` ( `name` ) VALUES ('Münster');
SELECT * FROM `test` WHERE name LIKE 'Munster'
Code: Alles auswählen
ALTER TABLE `phpbb_users` CHANGE `username` `username` VARCHAR( 25 ) BINARY NOT NULL