DB-Fehler beim Update doppelter Username durch Umlaut

Topics from older beta tests.
Gesperrt
Jochen
Team
Beiträge: 1506
Registriert: 22. Feb 2006, 18:11

DB-Fehler beim Update doppelter Username durch Umlaut

Beitrag von Jochen »

Bei uns war mal ein User so clever "Dominik" als Benutzername zu wählen weil "Dominik" schon weg war. Das führt beim Update zu einem Fehler.
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hi Jochen,

kannst du das bitte genauer beschreiben. Was war jetzt an dem neuen Namen anders und welches Update (von Version nach Version) hat dann nicht funktioniert ?

Gruß
Markus
Jochen
Team
Beiträge: 1506
Registriert: 22. Feb 2006, 18:11

Beitrag von Jochen »

Hi Fasse,
na klar kann ich :-)

- es gibt zwei User
- der eine hat als Usernamen "Dominik" der andere "Döminik"
- aktuelle Version 2.1.8
- jetzt Update auf 2.2 Beta1

Fehlermeldung:
S Q L - E R R O R

CODE: 1062
Duplicate entry 'Döminik' for key 2

B A C K T R A C E

FILE: adm_program/system/db/mysql.php
LINE: 210
CALL: DB->db_error()

FILE: adm_program/system/db/mysql.php
LINE: 80
CALL: MySqlDB->db_error()

FILE: adm_install/update.php
LINE: 202
CALL: MySqlDB->query()
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Ah, jetzt weiß ich was du meinst :)

Im ersten Post war kein Unterschied im Namen zu sehen.
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Ich hab mir das jetzt mal angeschaut.

Ausgelöst wird der Fehler durch die Konvertierung der Tabellen auf UTF8. Hier werden allerdings die Sonderzeichen mit konvertiert und "Döminik" steht weiter mit ö in der Tabelle.

Ich gehe im Moment davon aus, das der UNIQUE INDEX die Sonderzeichen bei UTF8 einfach ignoriert und für diesen keine Abweichung zur normalen Schreibweise sind.

Mein Vorschlag wäre jetzt, Sonderzeichen im Programm für das Feld Benutzername zu verbieten und alle vorhandenen Sonderzeichen konvertieren.

Dies wird nach dem Update dann natürlich für die entsprechenden User Probleme geben, da sie sich nicht mit ihrem gewohnten Namen einloggen können.

Gruß
Markus
Jochen
Team
Beiträge: 1506
Registriert: 22. Feb 2006, 18:11

Beitrag von Jochen »

Hallo,
treffen würde das vermutlich fast jede Installation. :?

Hier die passende Doku: http://dev.mysql.com/doc/refman/5.1/en/ ... -sets.html
Mein Vorschlag wäre jetzt, Sonderzeichen im Programm für das Feld Benutzername zu verbieten und alle vorhandenen Sonderzeichen konvertieren.
Da würde es dann beim Doeminik hängen bleiben.

Wenn wir da die interne Kontrolle ob ein Username schon weg ist entsprechen anpassen, würde das in den meisten Fällen doch schon reichen. Wenn es den Dominik schon gibt darf der Döminik eben nicht mehr angelegt werden und umgekehrt.

Blieben die Fälle bei denen das Kind jetzt schon in den Brunnen gefallen ist. Das müsste dann vom Webmaster händisch gelöst werden. Ich vermute aber mal, dass das sehr selten vorkommt.

Gruß Jochen
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hi Jochen,

ich glaub mein Kommentar war etwas missverständlich.

Ich meinte, dass wir nur noch normale Zeichen beim Benutzernamen erlauben. Sonderzeichen sind verboten und werden nicht automatisch konvertiert.

Konvertieren will ich die bereits vorhandenen Sonderzeichen bei bestehenden Datenbanken.

Dies kann man meiner Meinung nach nicht durch den Admin machen lassen, da dies erst während des Updates auffällt und die DB dann in einem Zwischenzustand ist.

Ich würde dann folgende Ersetzung vorschlagen:

ö => oe
ä => ae
ß => ss
ü => ue
é => e
...

evtl. müsste man dann noch prüfen, ob durch diese Ersetzung nicht doch wieder doppelte Namen vorkommen.

Gruß
Fasse
Jochen
Team
Beiträge: 1506
Registriert: 22. Feb 2006, 18:11

Beitrag von Jochen »

Hallo Fasse,

Ich glaub ich hatte Dich schon richtig verstanden aber mich selbst vielleicht nicht klar genug ausgedrückt.

Bei deiner Variante würden sich vermutlich die Usernamen von vielen Nutzern änderrn, obwohl das garnicht nötig ist. Damit sorgen wir dann für einen Ansturm bei den Webmastern.

Wenn wir es lassen wie bisher, müsste sich, um zukünftige Fehler zu vermeiden, die Dupplikatkontolle nur genau verhalten wie MySQL.

Vor dem Update müssten wir kontrollieren ob der Fehler auftreten kann. Ich denke mal das die wenigsten Installationen überhaupt betroffen sein werden. Wenn es Konflikte gibt könnte der Webmaster entscheiden wessen Username geändert wird.

Gruß Jochen
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Ich denke nicht, dass es momentan viele Nutzer mit Sonderzeichen im Benutzernamen gibt.

Die bessere Methode ist die Sonderzeichen zu entfernen und keine mehr zu zulassen.
Damit hat man dann ein einheitliches System und keine Ausnahmen in manchen Systemen.

Wenn wir die bestehenden Namen mit Sonderzeichen lassen würden, dann wird es komplizierter bei der Prüfung des neuen Namens. Wie willst du prüfen, ob der Nutzername schon existiert ohne ein Insert zu machen, welches auf Fehler läuft ?
Jochen
Team
Beiträge: 1506
Registriert: 22. Feb 2006, 18:11

Beitrag von Jochen »

Ich denke nicht, dass es momentan viele Nutzer mit Sonderzeichen im Benutzernamen gibt.
Bei uns sind es 5 von 350 registrierten Usern. Nicht viel aber auch nicht marginal.
Die bessere Methode ist die Sonderzeichen zu entfernen und keine mehr zu zulassen.
Damit hat man dann ein einheitliches System und keine Ausnahmen in manchen Systemen.
Ich wollte auch keine Ausnahmen machen, Sonderzeichen blieben einfach erlaubt.
Wenn wir die bestehenden Namen mit Sonderzeichen lassen würden, dann wird es komplizierter bei der Prüfung des neuen Namens. Wie willst du prüfen, ob der Nutzername schon existiert ohne ein Insert zu machen, welches auf Fehler läuft?
Zukünftige Anmeldungen sind gar kein Problem habe ich festgestellt. Bisher suchen wir ja auch in der Tabelle ob der User schon existiert. Die Suche reagiert da identisch. Wenn Dominik schon drin steht, und Döminik versucht sich zu registrieren sagt unser geniales Programm ätsch den user gibt es schon.

So müssten nur bestehende Konflikte gelöst werden. Ich würde mir eine Kontrolle für den Installationsprozess ausdenken und dann für den sehr unwahrscheinlichen Fall auf einen Supportartikel verweisen.

Gruß Jochen
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Jochen hat geschrieben:Zukünftige Anmeldungen sind gar kein Problem habe ich festgestellt. Bisher suchen wir ja auch in der Tabelle ob der User schon existiert. Die Suche reagiert da identisch. Wenn Dominik schon drin steht, und Döminik versucht sich zu registrieren sagt unser geniales Programm ätsch den user gibt es schon.
Hmm, genau das hatte ich gestern getestet und es hatte nicht funktioniert. Aber jetzt klappts. Da hab ich wohl gestern irgendwas übersehen.

Gut, dann haben wir zum Glück kein Problem damit.

Um später aber Probleme weiter auszuschließen, würde ich doch gerne die Sonderzeichen für zukünftige Anmeldungen unterbinden. Gerade beim Loginnamen, der doch eine zentrale Bedeutung hat, sollten wir uns keine künstlichen Probleme ins Haus holen. Wenn wir nämlich irgendwann mit PHP oder JS "Dominik" und Döminik" vergleichen ist das sehr wohl ein Unterschied und könnte bei Prüfungen zu Problemen führen.
Jochen
Team
Beiträge: 1506
Registriert: 22. Feb 2006, 18:11

Beitrag von Jochen »

Um später aber Probleme weiter auszuschließen, würde ich doch gerne die Sonderzeichen für zukünftige Anmeldungen unterbinden
.

Damit könnte ich sehr gut leben.
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Ist jetzt so umgesetzt.
Gesperrt