| 

.NET C# Java Javascript Exception

3
Hallo zusammen,

ich habe mit einigen Tabellen (auf deren Inhalt ich keinen direkten Einfluss habe) ein Problem bei der Suche mit Umlauten. So kommt es in manchen Spalten vor, dass in den Wörtern Umlaute (ä,ö usw.) vorkommen, aber auch die Ersetzung (z. B. Oesterreich).

Daraus folgt, dass eine Abfrage

SELECT * FROM tabelle WHERE spalte LIKE '%Österreich%';

das gerade genannte Beispiel nicht findet. Nun möchte ich, dass aber Österreich und Oesterreich gesucht werden. Wie kann man das realisieren? Ich stoße gedanklich immer wieder bei regexp an, aber komme nicht wirklich auf eine funktionierende Formulierung. Welcher Datenbankguru kann mir helfen?
11.10.2012
muffi 1,4k 1 9
3 Antworten
1
Guten Morgen,

aber der Ansatz mit der Collations ist schon richtig. Bist du dir sicher mit welchem Zeichensatz das Ö in der Datenbank steht und ob du den selben Zeichensatz bei deiner Abfrage nutzt?

Beispiel:
In der Datenbank steht das Ö als Iso8859-1 macht dann ein Byte für das Zeichen.
Deine Abfrage ist aber mit UniCode oder UTF-8. Dann hat das Ö schon 2 Byte und ist nicht mit dem Iso8859-1 vergleichbar.

In diesem Fall würde auch eine Regex nicht weiter helfen. Eier kann man nicht mit Biernen vergleichen.

Übrigens hier (http://codekicker.de/fragen/Umlaute-LIKE-Anweisungen-MySQL-richtig-erkannt#a23908) gab es schon mal so was ähnliches.

Gruß Jens
12.10.2012
XJenso 297 7
Sagen wir es mal so: ich habe es inzwischen mit dem regulärem Ausdruck doch hingebracht. Als Workaround ersetze ich im Falle eines ä durch den Ausdruck (ä|ae) usw. Das scheint wenigstens zu funzen. Rlike hat ansonsten bei mir im Moment zumindest nur den Nachteil, dass es langsamer läuft als like.
muffi 12.10.2012
Wenn es dir aber auf die Geschwindigkeit ankommt, dann ist das RLIKE natürlich ein Killer. RegEx auf Mysql ist so ziemlich das langsamste was geht. Du kannst in dem Fall keinen Index und Suchhilfen nutzen. Jeder Datensatz wird direkt angeschaut. Aus meiner Sicht keine wirklich gute Idee. Auch LIKE ist nicht besonders schnell. Am besten ist immer noch einen Index auf die Spalte und dann direkt mit Spalte = 'Österreich' (wenn das den überhaupt möglich ist und kein Volltext) suchen.
XJenso 12.10.2012
0
bin jetzt auch kein Experte, aber kannst dich mal über "collations" informieren:
http://dev.mysql.com/doc/refman/5.1/en/charset-collation-effect.html
11.10.2012
erh 86 3
Bringt mich leider nicht viel weiter. Fehler: COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf8'
muffi 11.10.2012
0
Welche Kollation hast Du den überhaupt eingestellt? utf8_general_ci?
Und wie ist die Zeichencodierung Deines Abfragestrings? Auch UTF-8?

Siehe auch: http://dev.mysql.com/doc/refman/5.1/en/charset-unicode.html
12.10.2012
Xantiva 2,3k 2 9
Die Tabelle hat latin1_german1_ci als Kollation. Aber wie ich in meinem Kommentar an XJenso schon schrieb, das Problem habe ich inzwischen hoffentlich im Griff.
muffi 12.10.2012
Ok, wobei das eigentlich funktionieren muss! Welche Zeichencodierung hat denn Dein SQL String? Ist der vielleicht UTF-8? Dann solltest Du mal versuchen, den in latin1 oder iso-8859-1 zu wandeln und schauen was dann passiert.
Xantiva 12.10.2012

Stelle deine Mysql-Frage jetzt!