DB-Fehler beim Update doppelter Username durch Umlaut
DB-Fehler beim Update doppelter Username durch Umlaut
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.
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:
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()
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
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
Hallo,
treffen würde das vermutlich fast jede Installation.
Hier die passende Doku: http://dev.mysql.com/doc/refman/5.1/en/ ... -sets.html
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
treffen würde das vermutlich fast jede Installation.

Hier die passende Doku: http://dev.mysql.com/doc/refman/5.1/en/ ... -sets.html
Da würde es dann beim Doeminik hängen bleiben.Mein Vorschlag wäre jetzt, Sonderzeichen im Programm für das Feld Benutzername zu verbieten und alle vorhandenen Sonderzeichen konvertieren.
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
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
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
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
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
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 ?
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 ?
Bei uns sind es 5 von 350 registrierten Usern. Nicht viel aber auch nicht marginal.Ich denke nicht, dass es momentan viele Nutzer mit Sonderzeichen im Benutzernamen gibt.
Ich wollte auch keine Ausnahmen machen, Sonderzeichen blieben einfach erlaubt.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.
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.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?
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
Hmm, genau das hatte ich gestern getestet und es hatte nicht funktioniert. Aber jetzt klappts. Da hab ich wohl gestern irgendwas übersehen.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.
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.