MySQL >= 8.x oder MariaDB – RegularExpression Word-Bounderies – Workaround

Ich hatte gerade ein echtes Aha-Erlebnis in Sachen Regular-Expressions. In denen bin ich sonst eigentlich recht fit, aber man lernt ja bekanntlich nie aus.

Folgende Konstrukte sind in einem SQL-Statement fehlgeschlagen, nachdem ich eine aktuelle MariaDB bzw. eine MySQL 8 Datenbank im Einsatz hatte.


[[:<:]]4711[[:>:]]

Selbst mir war diese Syntax in der Form nicht bekannt. Die beiden Pattern beziehen sich auf Word-Bounderies. Mit anderen Worten wir suchen ob in einem String die Folge 4711 enthalten ist, aber nur exakt diese, Folgen wie 47112 sollen nicht gefunden werden. Im konkreten Beispiel ging es um eine kommagetrennte Liste von Zahlen die zu durchsuchen ist. Dabei kann die 4711 aber auch am Anfang oder am Ende stehen. In MySQL 8 und höher ist der Unterstützung für diese Syntax weggefallen, aus welchem Grunde auch immer. Aber es gibt Ersatz:


[^[:word:]]4711[^[:word:]]

Auch hier suchen wir die Ziffernfolge umrandet von etwas was kein Wort ist – das kann ein Zeilenende, Zeilenanfang, oder etwas anderes als alphanumerisch + „_“ sein [:word:] == [:alphanum:_].

 

Vom Himmel hoch da komm ich her – Skydrive-Schwachsinn zur Weihnachtszeit

Vor einigen Tagen hatte ich mal wieder ein absolutes Schlüsselerlebnis, das mich in meiner Skepsis gegenüber Windows 8 und Microsoft-Produktem im Allgemeinen deutlich bestärkt hat. Sicher sind die Produkte von Microsoft in vielen Fällen ein gewisser Standard, aber es gibt immer wieder Ecken und Kanten an denen ich mich einfach nur ärgere wie etwas gelöst ist.

Windows Vista ist ebenso eine Ladenhüter wie es schon seinerseits Windows ME war – viele Feautres gut gemeint und gewollt, aber die Realisierung war nicht der Knaller. Ähnliches sehe ich gerade bei Windows 8 – auch hier hakt es an vielen Stellen und das Betriebsystem hat sich meilenweit von dem entfernt was es eigentlich machen sollte – Ressourcen des Rechners bündeln und allen Anwendungen zur Verfügung stellen, auf Basis einer einheitlichen Schnittstelle. Das Fehlen des Startmenüs mit der Suchfunktion ist eines, aber eine komplette Touch-Bedienung für einen Desktop-PC oder Laptop an dem Maus und Tastatur angeschlossen sind – das kann in meinen Augen nicht hinhauen. Ironie dabei ist der Werbesong „Everything at once“ von „Lenka“ – dort werden verschiedenste nicht miteinander vereinbare Gegensätze postuliert, welche die Sängerin alle doch erfüllen möchte. Wer das mal probiert hat, weiß: Manche Dinge schließen sich einfach gegenseitig aus … Ich bin gespannt wann sich diese Erkenntnis auch in Firmen herum spricht (und das betrifft leider nicht nur Microsoft, auch andere Firmen verwenden „Standard-Software“ für Zwecke, für die sie nie gedacht war und wundern sich dann noch über „komische“ Ergebnisse).

Was war das konkrete Problem diesmal? Ein Kunde wollte wie bisher unter Windows verschiedene Bild-Dateien per e-mail verschicken. Soweit nichts wirklich Spannendes oder Nerviges. Da es bequem und auch legitim ist, markierte er die Bilder seiner Wahl und wählte im Kontext-Menü: Senden an … => e-mail-Empfänger. Nun ging auch brav das eingerichtete (und mitgelieferte) Windows Live Mail auf (oder wie ich es nach der Erfahrung wohl eher nenne: „Windows Live Quäl“ – es quält dich ggf. ein Leben lang…). Interessanterweise wollte das System jedesmal einen Hotmail-Account einrichten, obwohl bereits eine e-mail-Adresse konfiguriert war. Klickte man den Dialog einfach weg und schaute in die e-mail so wurde vom Mailprogramm angestrebt, die Bilder nur als Thumbnails in die e-mail einzubetten und die Originale zu Skydrive für eine bestimmte Zeit hochzuladen und per Link oder Bildergalerie verfügbar zu machen. Natürlich ist das nicht das was der Anwender eigentlich wollte, nämlich die Bilder einfach an die e-mail anhängen.

Was ist der Hintergrund? Generell bietet e-mail die Möglichkeit Anhänge mit zu versenden, so wie man es auch von klassicher Snail-Mail her kennt. Einfach etwas mehr in den Umschlag packen und im Anschreiben darauf verweisen. Mit HTML-Mails sind auch direkte Anzeige-Referenzen möglich, aber im Prinzip ist es jedesmal ein elektronisches Kuvert mit dem Inhalt, mal nur reiner Text, mal eben mit Anlagen. Problematisch ist die Mailbox-Größe der Empfänger bzw. Restriktionen der e-mail-Server aus Performance und Sicherheitsgründen: Oftmals sind hier Limits für eine Nachricht vorhanden und oft sind die recht knapp bemessen (es sei denn man ist sein eigener Mail-Admin und stellt sich die Einschränkungen entsprechend ab oder zumindest mal hoch ein). Daher ist es bei größeren Dateien oder Datenmenge oftmals ratsam auf Alternativen auszuweichen, also zum Beispiel den Upload der Datei auf einen Webserver und dem Empfänger nur einen Link (genauer einen URL) zuzuschicken damit er die Datei bei Bedarf herunter laden kann. In Etwa kann man es mit dem Angebot eines Webshops vergleichen bei dem man online bestellt und dann die Info bekommt: „Ihre Ware können Sie in Warenhaus XYZ in ihrer Nähe abholen, sie ist dort für sie bis zum soundsovielten reserviert).

Daher ist das Ansinnen von Live-Mail ja ganz gut gemeint, bewahrt es doch den Nutzer vor etwaigen e-mail-Rückläufern wenn die e-mail nicht zugestellt werden kann. Aber will ich wirklich jedes Bild in die Cloud eines amerikanischen Konzerns auslagern? Gerade im Blick auf die NSA-Affaire halte ich den Vorschlag für nicht zielführend und gelinde gesagt für Irreführung des Benutzers. Es wird eine Notwendigkeit vorgegaukelt die es schlichtweg nicht gibt.

Ich selbst verwende schon seit sehr langer Zeit alternative e-mail-Programme wie Pegasus-Mail (früher) und Mozilla Thunderbird (aktuell). Thunderbird macht hierbei vor wie man es besser machen kann: Hängt man Attachments einer bestimmten Größe an, gibt es einen Hinweis auf einen Cloudservice, der darauf hinweist, dass es problematisch sein könnte eine derat „dicke“ e-mail zu versenden, und ob man diesen nutzen möchte. Man hat also definitiv die Wahl was man machen möchte, etwas was mit Live Mail leider nicht geht – zumindest habe ich auf die Schnelle keine passende Option gefunden und diverse Foren-Einträge im Netz schildern ähnliche Erfahrungen. Von daher kann ich leider als ITler keinem Menschen mehr die Benutzung von Live-Mail auch nur nahelegen als Alternative, sondern kann nur auf externe Programme verweisen die dem alten Unix/Linux-Mantra der Software treu geblieben sind „do one thing and do it right“ – auf gut deutsch: Mache eine Sache, die aber dafür richtig und nicht alles nur so halb und dafür auf einmal (everything at once). In der Linux-Welt gibt es viele spezialisierte Programme für genau einen Zweck, weitere Funktionen, die nichts mit der eigentlichen Aufgabe zu tun haben, sucht man aber (zu Recht) vergeblich. Sicherlich ist das nicht immer und überall bis ins Letzte sinnvoll, aber es hat sich als gute Richtlinie für die Modularisierung von Programmen erwiesen: Für jeden Zweck das passende Werkzeug. Man versucht doch auch nicht, Schrauben mit einem Hammer „einzuschrauben“…

Einen Würg-Around gibt es dann dennoch für Windows Live Mail und das Kontext-Menü:

  1. Im Ordner, in dem sich die Bilddateien befinden eine leere Textdatei erzeugen (z.B. bla.txt), diese muss noch nicht einmal Inhalt haben
  2. Zusätzlich zu den Bildern die gerade erzeugte Dummy-Datei anwählen
  3. Kontextmenü => Senden an e-mail-Empfänger
  4. In Windows Live-Mail wird nun eine e-mail mit regulären Attachments erzeugt (es geht also …)
  5. Aus der Attachmentliste und der Auflistung im Text die leere Textdatei wieder rauswerfen
  6. Voila!

Das so ein Murks notwendig ist, zeugt davon, dass man scheints noch nicht gelernt hat, auf einen Anwendungsfall wirklich passende Lösungen zu liefern – das Gängeln des Benutzers hat ja aber auch eine jahrzehnte lange Tradition bei Microsoft. Warum das wissen wohl nur die Marketing-Menschen aus Redmond.

In diesem Sinne erst mal frohe Weihnachten und viel Spaß beim Verschicken von e-mails mit handelsüblichen Attachments.