Alexander (HH): MySQL : mit regulären Ausdrücken Wörter für Buchstaben suchen

Beitrag lesen

Moin Moin!

Umstieg auf ein anderes Suchsystem. Webglimpse ist mir da mal begegnet

Das ist zum Durchsuchen von Dateien, nicht von Datenbanken.

Dein Problem ist die kaputte RE-Engine von MySQL. Es gibt diverse andere RDBMS, die diesen Fehler nicht haben.

Ich hab mir den Spaß gemacht und mal mit einer produktiven PostgreSQL-Datenbank getestet, auf die ich gerade Zugriff habe. (Ja, das macht man nicht.)

select lastname from users where lastname~*'[1]{4}$'

(Suche mir alle Nachnamen aus der Benutzer-Tabelle, die die vier Buchstaben W, E, I und ß in Groß oder Klein enthalten und die exakt vier Zeichen lang sind.)

Antwort: "Weiß" (ja, nur ein User hat diesen Nachnamen.)

Hätte PostgreSQL das UTF-8-Problem, wäre das Pattern und der Nachname fünf Bytes lang und das Pattern hätte keinen Treffer ergeben.

Der sauberste Weg ist also wohl die Migration auf PostgreSQL, damit bekommst Du nicht nur eine funktionierende RE-Engine, sondern ersparst Dir auch diverse andere Merkwürdigkeiten von MySQL. Nicht, das PostgreSQL keine Merkwürdigkeiten hätte, aber die Liste ist deutlich kürzer, betrifft teilweise nur uralte Versionen, und die Problemstellen sind IMHO exotischer als bei MySQL.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".

  1. weiß ↩︎