PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mysql und Umlaute in Benutzernamen


dhr
13.03.2007, 01:25
Hallo zusammen!

Ich betreibe auf einem root-Server (debian-etch) zwei vBulletins auf verschiedenen Domains (mysql 5.0.32-Debian_7-log, php 5.2.0-8, apache2 2.2.3-3.3). Seit einem nicht näher bestimmbaren Zeitraum (evtl. wegen regelmäßigen dist-upgrades...) ist es nun nicht mehr möglich, sagen wir zwei user 'testuser' und 'testüser' eindeutig aus der DB zu selektieren:

die beiden abfragen

select * from user where username = 'testuser'
select * from user where username = 'testüser'

liefern jeweils beide User zurück. In der Folge können sich nun User, die sich z.B. nur durch einen Umlaut/Selbstlaut im Namen unterscheiden, nicht mehr anmelden. Die Neuregistrierung eines Benutzers 'Üser' ist ebenfalls nicht mehr möglich, wenn 'User' schon existiert - fälschlicherweise schlägt die Doublettenprüfung hier eben auch an.

In der mysql-config verwende ich folgende Einstellungen:
[mysqld]
...
character-set-server=latin1
collation-server=latin1_german1_ci
...

Sämtliche DBs und Tabellen stehen auch auf latin1_german1_ci. In der vB-Config macht es keinen Unterschied, ob ich dbtype mysql oder mysqli angebe (letzteres funktioniert auch explizit mit charset=latin1 nicht).

Im phpMyAdmin habe ich dasselbe prolem - dadurch bin ich überhaupt erst draufgekommen. Ich bin mit meinem Latein am Ende. Ich hoffe, Euch fällt etwas ein.

Viele Grüße,

Daniel

s.molinari
13.03.2007, 07:35
Hi dhr,

Das hat mit der Kollation zu tun.

http://dev.mysql.com/doc/refman/5.1/en/charset-collation-effect.html

Bei uns ist latin1_swedish_ci eingestellt und wenn du bei uns nach Üser suchst, kommt

keyser
Keyser Soze
Seyser
syserz
Üser

Ü ist dann wie "Y".

Diese Kollation würde die Registrierung helfen aber wie du siehst, nicht die Suchfunktion (für Benutzer).

Ich glaube mit UTF-8 würde das Problem behoben, allerdings ist vBulletin nicht 100%ig UTF-8 konform. Das soll ab Version 4 behoben sein. Wir können nur vorschlagen die Kollation auf latin1_swedish_ci zu wechseln.

Scott

dhr
14.03.2007, 01:24
vorab: Umstellung auf swedish_ci war erfolg- und hilfreich. Vielen Dank!

Was ich aber nicht verstehe ist, warum sich die Sortierreihenfolge auf WHERE-Klauseln auswirkt. Ich dachte bislang, (zumindest bei "=" - like und % tanzen ja eh aus der Reihe) dass bei
WHERE 'left-side'=right-side'
die Strings byteweise verglichen werden. Ist ja offensichtlich nicht so oder aber der ASCII-Wert (oder das jeweilige charset-pendant) von "ü" wird vor dem Vergleich intern nach "u" gewandelt...

Gruß
Daniel