media-scientific - IT Blog

the backend developers blog

MySQL - Umlaute, SELECT, LIKE und eine bekloppte DIN-Norm

Vorlesen mit webReader

Informatiker wollen eigentlich immer das haben was sie suchen. So soll eine Abfrage in einer MySQL Datenbank per LIKE oder SELECT eben auch den Namen “Müller” finden und nicht “Muller”…

Dank der DIN-Norm 5007 ist damit Schluß. Ä ist das Gleiche wie A und Ü ist gleich U. Also, “über den Wolken” ist genau das selbe wie “uber den Wolken” und hätte ich das in meiner Schulzeit gewusst, wär meine Deutschnote besser gewesen :-).

Nun wer diese Problem bekommt, der hat es schwer. MySQL sagt leider nicht das:

  • a != ä
  • o != ö
  • u != ü

Sondern setzt all diese Zeichen gleich. Das kann gerade bei Ortsnamen oder Personennamen falsche Suchergebnisse bringen.

Der Grund ist unfassbar: Es handelt sich dabei um eine DIN-Norm (DIN 5007), die besagt das ä==a usw. ist.

Nun es gibt leider nur zwei Möglichkeiten mit dem Problem umzugehen.

Die erste ist, man findet sich damit ab und probiert was anderes und die Zweite ist das völlige umkrempeln der Datenbank.

Man kann die Art der Sucher mit dem Zusatz collate beeinflussen, jedoch gibt es kein UTF8-Collate was die Anforderungen erfüllt (eben streng nach DIN 5007).

Um collate latin1_german2_ci zu verwenden, was das Problem lösen würde, muss jedoch die komplette Datenbank auf Latin1 convertiert werden. Wer Lust darauf hat, kann dies mit CONVERT() oder CAST() erreichen. Anschließend kann beipielsweise die folgende Abfrage verwendet werden:

select * from mitarbeiter where (nachname LIKE 'Müller' collate latin1_german2_ci );

Nun ich hatte gerade keinen Lust, tonnenweise Daten zu kastrieren um mir dann Gedanken zu machen, wie ich die App umstricke und jeden String der an die DB geht erstmal von UTF-8 auf Latin1 transcodiere.

Wer weitere Infos zu diesem Thema möchte, findet hier eine kleine Sammlung:

  • http://yoonkit.blogspot.com/2006/03/mysql-charset-from-latin1-to-utf8.html
  • http://dev.mysql.com/doc/refman/5.1/de/charset-unicode-sets.html#id3007223
  • http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

Leave a Reply

You must be logged in to post a comment.