Andreas-Lindig: deutsche Umlaute in UTF-8 suchen (mySQL)

Hallo Forum,

wenn ich meine Daten in mySQL in UTF-8 abspeichere, bekomme ich ja keine UTF-8 Zeichen (weil mySQL das nicht kann), sondern in ISO-8859-1 dargestellte UTF-8 Codierung. D.h. für ü z.B. werden zwei (ISO-8859-1)-Zeichen gespeichert. Soweit kein Problem. Aber, wenn ich jetzt nicht-case-sensitiv suchen will, bekomme ich ein Problem, weil ü und Ü durch verschiedene zwei-Byte-Folgen repräsentiert werden (ü und Ãae). Es nützt mir also gar nichts, Groß- und Kleinschreibung zu ignorieren. Ich müßte stattdessen "Küchentücher" als "Küchentücher || KÜchentücher || KüchentÜcher || KÜchentÜcher" suchen. Hat jemand da eine Idee für mehr Praktischkeit?

Gruß, Andreas

--
<img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
hier könnte auch ruhig mal'n neues Bild stehen.
  1. wenn ich meine Daten in mySQL in UTF-8 abspeichere, bekomme ich ja keine UTF-8 Zeichen (weil mySQL das nicht kann), sondern in ISO-8859-1 dargestellte UTF-8 Codierung.

    Hat jemand da eine Idee für mehr Praktischkeit?

    Brauchst Du unabdingbar Unicode? Es ist ja nun nicht so, dass die von MySQL unterstützen iso-8859-Tabellen böse[tm] wären oder dass einem damit für gewöhnlich etwas Gravierendes entgehen würde.

    Im übrigen: http://dev.mysql.com/doc/mysql/en/Charset-Unicode-sets.html.

    1. Brauchst Du unabdingbar Unicode?

      naja, was ist schon unabdingbar? Wenn Du Brot kaufst, kannst Du natürlich auch fragen: "brauche ich unbedigt etwas zum drauflegen?" ;-)

      Es ist ja nun nicht so, dass die von MySQL unterstützen iso-8859-Tabellen böse[tm] wären oder dass einem damit für gewöhnlich etwas Gravierendes entgehen würde.

      naja, mir entgeht eine einigermaßen sichere Codierung des Euro-Zeichens und allgemein hätte ich das Projekt halt gern mal professionell, also, daß es auch irrwitzige Einträge mit Mathe-Zeichen oder gelegentlichen Osteuropa oder Japsen-Zeichen annimmt. Diese Beschränkungen sind einem Nomaluser, für den das Projekt gedacht ist, nicht zu vermitteln.

      Im übrigen: http://dev.mysql.com/doc/mysql/en/Charset-Unicode-sets.html.

      gilt aber erstens erst ab Version 4.1 (ich muß mich ja auch nach gängigen Hostern richten) und zweitens keine Ahnung: weißt Du, ob man das dann für die Tabellen oder zumindest für die DB einzeln von Userseite aus einstellen kann? Ich finde mich in diesem unsäglichen mySQL-Manual nicht zurecht. Bisher kann man den Zeichensatz ja nur als Admin festlegen. Da kann ich also nichtmal das ganze Projekt auf Osteropa oder sonstwo umstellen. Immer schön nur ISO-8859-1, weil mein Hoster das nunmal so hat.

      Gruß, Andreas

      --
      <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
      hier könnte auch ruhig mal'n neues Bild stehen.
      1. allgemein hätte ich das Projekt halt gern mal professionell, also, daß es auch irrwitzige Einträge mit Mathe-Zeichen oder gelegentlichen Osteuropa oder Japsen-Zeichen annimmt.

        Verständlich. Die Frage ist nur, ob man mit der wohl eher nicht-existenten Unicode-Unterstützung in älteren MySQL-Versionen und den daraus resultierenden Klimmzügen sich nicht eher auch noch ins andere Knie schießt.

        weißt Du, ob man das dann für die Tabellen oder zumindest für die DB einzeln von Userseite aus einstellen kann?

        Beim Anlegen der Tabelle ist das möglich: As of MySQL 4.1, character column definitions can include a CHARACTER SET attribute to specify the character set and, optionally, a collation for the column. (http://dev.mysql.com/doc/mysql/en/CREATE_TABLE.html)

        Aber um auf Dein Problem zurück zu kommen: MySQL akzeptiert reguläre Muster, statt nach "Küchentücher" in allen Variationen könntest Du immerhin etwas kürzer nach "KÃ(ü|Ü)chentÃ(ü|Ü)cher" (ü und Ü jeweils zweites Unicode-Byte) suchen oder die ganz einfache LIKE-Variante mit "KÃ%chentÃ%cher" probieren (deren Ergebnisse allerdings nochmal nachgespült werden müssen).

        Es ist lästig und fehlergefährdet, aber so oder so wirst Du nicht darum herumkommen, das, was in MySQL fehlt, selbst zu implementieren.