Tobias Schmidt: utf8 Kollationen: Umlaute

Hallo,

ich habe folgendes Problem. Ich schreibe gerade ein Suchprogramm für Orte um die Postleitzahlen zu finden. Mein Auftraggeber möchte nicht, dass bei der Eingabe von Umlauten das Äquivalent mit angezeigt wird. Das Ganze soll aber case insensitive sein.

utf8_general_ci : Ü=U, Ö=O, etc -> fällt raus
utf8_swedish_ci : Y=Ü -> fällt raus
utf8_unicode_ci : Ü=U, etc. -> fällt raus
utf8_bin : case sensitive

Gibt es kein utf8_bin_ci? Und wenn ja, wo kann ich es finden (ist nicht installiert). Gibt es eine andere Kollation, die in Frage kommen würde?

Meine einzigen Lösungsansätze sind bisher, utf8_bin zu nehmen und das Suchwort immer groß schreiben (da die Orte *in der Regel* großgeschrieben in der Datenbank liegen), oder utf8_general_ci zu nehmen und in der Applikation nochmal nachzufiltern. Bin über jedweden Hinweis dankbar.

MfG
Tobias Schmidt

  1. hi,

    Mein Auftraggeber möchte nicht, dass bei der Eingabe von Umlauten das Äquivalent mit angezeigt wird. Das Ganze soll aber case insensitive sein.
    [...]
    Gibt es kein utf8_bin_ci?

    bin und ci schliessen sich quasi per Definition gegenseitig aus.

    bin bedeutet nun mal, binär die Bytewerte von Zeichen zu vergleichen.
    Und die ci-Collations andererseits sind ja gerade dazu gedacht, nicht byte-weise zu vergleichen, sondern basinerend auf "Vergleichstabellen" bestimmten Byte-Kombinationen das gleiche "Zeichen" zuzuordnen.

    Gibt es eine andere Kollation, die in Frage kommen würde?

    M.W. nein.

    Vielleicht lässt sich herausfinden, "wo" MySQL die Vergleichstabellen für die Collations hinterlegt hat - und dort eine eigene Definition hinzufügen.

    Meine einzigen Lösungsansätze sind bisher, utf8_bin zu nehmen und das Suchwort immer groß schreiben (da die Orte *in der Regel* großgeschrieben in der Datenbank liegen),

    Vielleicht könnte man aus "in der Regel" ein "definitiv ganz bestimmt immer" machen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Vielleicht könnte man aus "in der Regel" ein "definitiv ganz bestimmt immer" machen.

      Oder einfach UPPER() auf den Ort anwenden? Geschwindigkeitstechnisch sollte das ja bei UTF-8 und lateinischen Zeichen keine Probleme geben.

      Grüße,
      Gero