Auge: Sortierung von Strings in MySQL mit utf8_bin

Beitrag lesen

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

akzeptierte Antworten