Hallo
Eine Tabelle mit Benutzerdaten in einer MySQL-Datenbank enthält, wie überraschend, eine Spalte für den Benutzernamen user_name
. Die Tabelle wurde mit CHARSET=utf8
und COLLATE=utf8_general_ci
erstellt. Irgendwann ist aufgefallen, dass eine Suche nach "Änni" auch "Anni" ausspuckt. Als Konsequenz daraus wurde für die Spalte user_name
die Kollation utf8_bin
festgelegt.
Nun wird, wie es gewünscht ist, bei der Suche nach "Änni" nicht mehr "Anni" gefunden, schließlich sool es nicht möglich sein, dass sich mehrere Benutzer mit dem selben Namen registrieren, aber es soll auch nicht "Änni" von der Registrierung ausgeschlossen werden, weil es schon "Anni" gibt. Dies hat aber den Nebeneffekt, dass die Ausgabe, wenn sie nach der Spalte user_name
sortiert wird, getrennt nach Namen mit und ohne Großschreibung aufgelistet wird. Warum das so ist, ist klar, utf8_bin
unterscheidet strikt nach den Codepoints der Zeichen.
Da die Tabelle in einer Software, die sprachneutral agieren soll, enthalten ist, kann nicht einfach auf eine sprachabhängige Kollation umgestellt werden. Welche Möglichkeiten habe ich, eine Ausgabe unabhängig von Groß- und Kleinschreibung zu sortieren, ohne die Unterscheidung von z.B. "ä" und "a" aufzugeben?
Ist es eventuell sinnvoller, die Kollation der Spalte user_name
auf utf8_general_ci
zurückzustellen und nur für Vergleiche utf8_bin
zu benutzen?
Tschö, Auge
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett