MySQL: UTF-8 Umlaute werden als Vokale interpretiert

DrBonsai

Mitglied
Hall zusammen,

ich habe eine DB-Tabelle, in der alle Spalten utf8_general_ci kodiert sind.

bspw:
SQL:
+ ID +   title  + ... + 
I  1 I Vollkorn I ... I
+----+----------+-----+
I  2 I  Hanföl  I ... I
+----+----------+-----+
I  3 I    Öl    + ... +
+----+----------+-----+
Wenn ich jetzt eine Abfrage mache, wie die folgende

SQL:
Select tab.title FORM `tab` WHERE tab.title LIKE '%öl%'

sollte doch "Hanföl" und "Öl" ausgegeben werden, oder nicht?

Meine Abfrage liefert auch Vollkorn mit. Das "Ö" wird also als "O" und "Ö" interpretiert. Das sollte doch bei UTF8 nicht sein, oder sehe ich das falsch?

Wenn ich meine Spalte als utf8-bin kodiere, bekomme ich zwar nur noch Titel mit "öl" angezeigt, dafür wird die Abfrage dann case sensitive, so dass mir nur noch "Hanföl" ausgegeben, wird und nicht mehr "Öl".

Weiß hier jemand Rat?

Vielen Dank,
David
 
Ich antworte mal selber mit einer Möglichkeit, das Problem zu umgehen:

SQL:
$string = "Öl";
$searchstring = mb_convert_case($string, MB_CASE_LOWER, "UTF-8");

SELECT tab.title FORM `tab` WHERE LOWER(tab.title) COLLATE utf8_bin LIKE '%".$searchstring."%'

Ich konvertiere den Suchstring zunächst mal in Kleinbuchstaben (strtolower funzt nicht bei Umlauten). Die durchsuchte Spalte konvertiere ich ebenfalls in Kleinbuchstaben und setze sie auf utf8_bin.

Damit werden Umlaute korrekt interpretiert und meine Suche ist im Endeffekt Case-insensitive.

Meine Frage, warum utf-8 im ersten Ansatz keine Umlaute korrekt interpretiert, bleibt aber weiterhin ungeklärt.

Wenn jemand eine Idee hat, immer her damit ;-)

Grüße,
David
 
Zurück