Hallo,
da REGEXP nicht multibytesicher ist, stoße ich bei meiner Suchfunktion auf Schwierigkeiten.
Ich will eine Tabelle nach einem beliebigen String an beliebiger Stelle durchsuchen. Mit LIKE komme ich nicht weiter, da ich es hier nicht geschafft habe, die Wortgrenzen richtig zu erkennen. Gefunden werden soll z. B. der String
"und"
in Textpassagen wie
"Und gestern ...", "Heute und gestern", "Gestern und.", "Und?" etc.
nicht jedoch in Textpassagen wie
"Hund", "Undefinierbar" usw.
Mit REGEXP und der Beachtung von Wortgrenzen funktioniert das natürlich einwandfrei - so lange keine diakritischen Zeichen im Suchbegriff enthalten sind.
Etwas wie
Liefert natürlich keine Treffer, obgleich etwas wie "Elefanten sind grün." im Text vorkommt.
Gibt es hier irgendwelche Tricks, Erfahrungen usw., wie sich dieses Problem bewerkstelligen lässt? Selbstverständlich lasse ich mich auch eines besseren belehren und greife gerne auf LIKE zurück, wenn ein Wort richtig und sinnig (s. o.) getroffen wird.
Mit CONVERT und COLLATE hatte ich es bereits versucht, jedoch ohne Erfolg. Der genutze Zeichensatz ist UTF-8, die Kollation utf8_unicode_ci.
Ach ja, ich kann vorab Umlaute nicht einfach auf beiden Seiten durch "ae", "ue" usw. ersetzen, da die Inhalte in 16 Sprachen angelegt sind und hier eine entsprechend große Menge an diakritischen Zeichen anfällt. Die Problematik bezieht sich also nicht nur auf deutsche Umlaute.
Eine meiner Ideen war, grundsätzlich alle Zeichen, die nicht a-Z sowie 0-9 und _ sind, auf beiden Seiten zu entfernen (Blähfásêl => blhfsl), jedoch ist mir das SQL-seitig mit REGEXP nicht gelungen.
Irgendwelche Ideen?
pb
da REGEXP nicht multibytesicher ist, stoße ich bei meiner Suchfunktion auf Schwierigkeiten.
Ich will eine Tabelle nach einem beliebigen String an beliebiger Stelle durchsuchen. Mit LIKE komme ich nicht weiter, da ich es hier nicht geschafft habe, die Wortgrenzen richtig zu erkennen. Gefunden werden soll z. B. der String
"und"
in Textpassagen wie
"Und gestern ...", "Heute und gestern", "Gestern und.", "Und?" etc.
nicht jedoch in Textpassagen wie
"Hund", "Undefinierbar" usw.
Mit REGEXP und der Beachtung von Wortgrenzen funktioniert das natürlich einwandfrei - so lange keine diakritischen Zeichen im Suchbegriff enthalten sind.
Etwas wie
PHP-Code:
WHERE einetextspalte REGEXP '[[:<:]]grün[[:>:]]'
Gibt es hier irgendwelche Tricks, Erfahrungen usw., wie sich dieses Problem bewerkstelligen lässt? Selbstverständlich lasse ich mich auch eines besseren belehren und greife gerne auf LIKE zurück, wenn ein Wort richtig und sinnig (s. o.) getroffen wird.
Mit CONVERT und COLLATE hatte ich es bereits versucht, jedoch ohne Erfolg. Der genutze Zeichensatz ist UTF-8, die Kollation utf8_unicode_ci.
Ach ja, ich kann vorab Umlaute nicht einfach auf beiden Seiten durch "ae", "ue" usw. ersetzen, da die Inhalte in 16 Sprachen angelegt sind und hier eine entsprechend große Menge an diakritischen Zeichen anfällt. Die Problematik bezieht sich also nicht nur auf deutsche Umlaute.
Eine meiner Ideen war, grundsätzlich alle Zeichen, die nicht a-Z sowie 0-9 und _ sind, auf beiden Seiten zu entfernen (Blähfásêl => blhfsl), jedoch ist mir das SQL-seitig mit REGEXP nicht gelungen.
Irgendwelche Ideen?
pb