You are not logged in.

  • Login

1

Thursday, February 25th 2010, 1:00pm

MySQL & Umlaute - Ü=U?

Heyho,

ich verzweifle gerade an einer ungewohnten Stelle. In einem Registrierungsskript prüfe ich, ob der gewünschte Benutzername bereits vergeben ist. Nun fällt mir auf, dass trotz durchgehender UTF8-Kodierung (Datenbank-Server, Datenbank, Tabelle, Verbindung, Webseite) aller Daten, in einem einfachen SELECT Umlaute immer ihren Nicht-Umlaut-Pendant gleichgesetzt werden:

PL/SQL Code

1
SELECT * FROM (`users`) WHERE `username` = 'Müller'

Ergibt als Ergebnismenge einen Nutzer namens Muller, der auch in der Datenbank enthalten ist, aber eben nicht das gleiche wie Müller ist. Wie kann ich durchsetzen, dass Namen mit Umlauten als eigene Einträge wahrgenommen werden?

Danke im Voraus.

Grüße,
Philipp

P.S.: Damit bzgl. der Datenbankverbindung keine unbegründeten Zweifel aufkommen:


Source code

1
2
3
4
5
6
7
8
9
10
11
12
#Show Variables;

character_set_client	utf8
character_set_connection	utf8
character_set_database	utf8
character_set_filesystem	binary
character_set_results	utf8
character_set_server	utf8
character_set_system	utf8
collation_connection	utf8_general_ci
collation_database	utf8_unicode_ci
collation_server	utf8_general_ci

2

Thursday, February 25th 2010, 5:48pm

Nur eine Vermutung:
Aber schau dir mal interessehalber die Dateigröße des Index an.
Ändere dann mal die Collation der Tabelle zu utf_binary. Danach sollte dein Index größer sein und die Abfrage funktionieren.

Zuminst würdest du damit DUPLICATE KEY Fehler vermeiden.

UPDATE
Hier dann doch der Beweis nachgereicht: http://dev.mysql.com/doc/refman/5.1/en/case-sensitivity.html

3

Thursday, February 25th 2010, 9:00pm

Vielen Dank für den Hinweis! Ziemlich verwirrend. Aber nun ist es sogar so einfach gelöst:

PL/SQL Code

1
2
3
SELECT *
FROM (`users`)
WHERE `username` COLLATE utf8_bin = 'Müller'


0 rows.

Juhu!

4

Friday, February 26th 2010, 1:59am

geht es mit Müller nicht?

Similar threads

Social bookmarks