Etwas was mir zuvor nie aufgefallen war, ist die Tatsache, dass eine utf8 kodierte MySQL Tabelle mit einer beliebigen Kollation der utf8 Gruppe Umlaute immer gleich ihrer Repräsentanten ohne Doppelpunkte setzt, sprich als a = ä. Der Grund hierfür ist die Sprachnorm DIN 5007-1. Der beschriebene Sachverhalt wird in dem passenden wikipedia Artikel Alphabetische Sortierung kurz erklärt. Genau diese DIN Norm verwendet auch die MySQL Datenbank für die uft8 Kodierung, wie man der Doku aus dem Kapitel Unicode Character Sets entnehmen kann.

Es ergeben sich aus der durchaus sinnigen Norm aber zwei Probleme. Zum einem ist in einem als UNIQUE ausgezeichneten Feld das Eintragen von Munchen und München nicht möglich, da diese als gleich angesehen werden und eine Schlüsselverletzung hervorrufen. Zum anderem gibt eine Suche nach Munchen eben auch München aus. Um diese Probleme zu beheben wird im Internet häufig geraten die Kollation utf8_bin_ci oder utf8_unicode_ci zu wählen, was bei mir (MySQL 5.6.21) allerdings nicht funktionierte. Es gibt aber auch noch eine weitere Kollation und zwar  utf8_german2_ci. Diese wird aus welchen Gründen auch immer leider nicht in unserem bevorzugten Werkzeug, der MySQL Workbench angezeigt und man muss dementsprechend Datenbanken mit dieser Kollation von Hand anlegen / ändern. Die entsprechenden Abfragen lauten:

Bei bestehenden Datenbanken reicht das allerdings noch nicht aus und man muss betroffene Tabellenfelder ebenfalls einmal von Hand anpassen:

 

 



Kategorien: Tutorials

19. August 2016
Sebastian Köller

Verfasst von
Sebastian Köller