Jahresrückblick 2013

Ja es ist schon wieder ein Jahr rum – die Zeit der Weihnacht-Besinnungslosigkeit ist auch überstanden, also kommt nun die Bilanzierung der letzten 365 Tage. Wie in jedem Jahr glieder ich das nach Monaten.

Januar

Im Januar war noch nicht all zu viel los, ich habe die ersten Vorbereitungen für den Lauf in Biel begonen – fast hätte ich ja den Start ins Training mit 42km gemacht, aber es war dann doch etwas zu frisch. Eine erste Investition in meinen Haushalt habe ich getätigt und mir einen Staubsauger-Roboter zugelegt. Der hat sich mittlerweile super bewährt, die Staubmenge ist deutlich zurück gegangen.

Februar

Noch immer hatte der Winter das Land fest im Griff, aber das Training ging wie geplant weiter – mit oder ohne Schnee, die Berge des Odenwaldes waren niemals sicher vor den Biel-Läufern am Wochenende. Zudem bin ich ein ein Projekt eingestiegen, dass mich länger als geplant begleiten würde (es hat vor kurzem seinen Abschluss gefunden) der Neubau der DJK Feudenheim sollte mit Netzwerk und Telefon ausgerüstet werden. In der Wohnung habe ich endlich ein noch fehlendes Stück Einrichtung gebaut: Nach zwei Jahren endlich den Wunschspiegel mit Beleuchtung im Bad.

März

Im März war ich ziemlich zugedeckelt mit Arbeit, die bald zum Frust ausartete und in dem Moment auch keinerlei Spaß mehr machte, immerhin war das Wetter etwas besser und mit ausreichend Sport als Ausgleich war auch das zu ertragen. Sport der immer wichtiger wurde, denn Peter hatte den Count-Down auf Biel in jeder Mail eingebunden. Eine gewisse Vorfreude war zu spüren.

April

Ein wichtiges Event im April war sicherlich mein Geburtstag, ich habe ein neues Lebensjahrzehnt begonnen – ein komisches Gefühl. An die neue Klassierung bei Laufveranstaltungen muss man sich auch mal gewöhnen. Die Feier mit vielen Läufern war richtig gut, auhc wenn das Wetter kurzfristig einen Strich durch das geplante Grillen im Freien gemacht hat. Davon abgesehen war der Stresslevel auf Arbeit immer noch recht hoch, und der Frustpegel auch.

Mai

Zeit für einen ersten Testlauf in Vorbereitung auf Biel, allerdings nur ein Halbmarathon, dafür ein richtig schöner: Der Weltkulturerbelauf in Bamberg, zusammen mit Helgas Lauffreunden – immer ein Erlebnis. Einen Marathon der anderen Sorte habe ich mit dem Turnfest in Mannheim mitgemacht – eine Woche lang Ausnahmezustand mit rund 600 Gästen in der Feudenheim-Schule. Aber es hat alles geklappt und auch wenn die Veranstaltung bei den Gästen teilweise etwas “zersplittert” ankam – die Übernachtung und die Betreuung in der Schule wurde von allen gelobt,

Juni

Der Juni kannte in den Medien und auch für mich nur ein großes Thema: Jahrhunderflut an der Elbe. Damit fiel leider auch sehr sehr kurzfristig mein Lauf über 100km in Biel ind Wasser (im wahrsten Sinne des Wortes). Dafür gab es reichlich Einsatzerfahrung mit unserer Großpumpe und derm ersten richtig großen Hochwasser für mich. Die Menschen in Dresden und  Umgebung waren sehr dankbar, und die Versorgung mit Speisen und Getränken war scon fast luxusriös. Man hatte zeitweise fast vergessen können, dass man in einen Katastrophengebiet befindet.

Juli

Damit das Lauftraining nicht ganz für umme war, musste ich einen Ersatz finden. Den habe ich mit dem Wallensteinlauf in Altdorf als Halbmarathon und dem Römerman als Triathlon in Ladenburg gefunden, wenn auch beim Triathlon nur die Fitness-Variante. Zum Abschluss des Triathlons gab es dann abends noch ein Wiedersehen mit all den Abiturienten, denn es ist zehn Jahre her, dass ich mit der Schule abgeschlossen habe – wie die Zeit vergeht.
Und noch etwas hat sich im Juli ereignet – ich bin nicht mehr Single – mittlerweile sind 5,5 Monate seit dem ersten Treffen vergangen. Daher geht es jetzt auch Schlag auf Schlag weiter.

August

Schon lange geplant (seit Januar) war der Besuch bei den Tauchfreunden aus Glasgow bzw. die Teilnahme an deren verlängertem Wochenende. Mit Raimund bin ich wieder nach Schottland gefahren und habe dort viele schöne Stunden im Wasser in St. Abbs und an den Farne-Islands verbracht. Die Seelöwen sind echt ein Highlight – tierisch verspielt. Das kommt für 2014 auch aufs Programm.
Wichtigstes sportliches Ereignis im August war der Firmen-Ultra-Triathlon – jeder Teilnehmer eines Teams legt dabei einen zehntel Ironman zurück. Dieses Jahr wurde die Veranstaltung für alle Beteiligten zur Geduldsprobe – es hat den ganzen Tag gegossen wie aus Kübeln. Dennoch hat mich meine Freundin begleitet und fleißig Bilder gemacht. Das hat mich überrascht, aber im Rückblick ist das echt super wenn jemand an der Strecke steht den man kennt und der einen nach Kräften unterstützt.

September

Weiter gehts mit Urlaub – diesmal in Schweden, da war ich noch nicht. Zusammen mit meiner Freundin habe ich ein verlängertes Wochenende in Stockholm verbracht. Eine wahnsinnig tolle Stadt bei herrlichem Wetter. Highlights waren unter anderem die Teilnahme an der ersten Evakuierung des ABBA-Museums wegen eines Feueralarms. Abends gab es dann richtig kräftig Musik auf dem Festival “where’s the party?” – inklusive dem lustigen Spiel “Wie viele Schweden passen in einen Bus?” – denn die Verkehrsanbindung war absolut überfordert. Es dauerte irgendwie fast 15 Minuten bis der Bus die Türen überhaupt zubekommen hat … wir sind dann doch gelaufen, das war schneller. Hinterher haben wir erfahren, dass es eine Transport-Garantie in Stockholm gibt, wenn man mehr als 20 Minuten Verspätung hat, kann man sich einfach ein Taxi nehmen und bekommt es erstattet, wenn man den Beleg einreicht. Gut zu wissen.
Zudem haben wir ein richtig gutes Restaurant ausgegraben: Svartegrens – sehr sehr lecker und absolut zu empfehlen.

Oktober

Der 3. Oktober ist Tag der deutschen Einheit – für mich ein Tag in Nürnberg beim Stadtlauf. Zudem ist es der Auftakt für die Lebkuchen-Saison. Selbstverständlich habe ich viele bekannte Gesichter wieder getroffen, Helga und Heinrich waren an der Strecke mit dabei, Marion hat mich begleitet und wieder viele Fotos gemacht (endlich habe ich mal welche vom Stadtlauf). Ebenso durfte ein kurzes Treffen mit Erwin Bittel vom Team Bittel natürlich nicht fehlen. Die Laufzeit war ganz ordentlich, und auf das Essen in der L’Osteria kann man sich immer freuen, gerade als ausgehungerter Läufer.
Mit Marion feiere ich 3 Monate Partnerschaft, echt klasse sich wie sich das entwickelt hat, wir verstehen uns echt klasse.
Und auch bei der DJK heißt es wieder mit anpacken: der Herbstlauf ist eine der größten Veranstaltungen auf dem Gelände, dieses Jahr zum zweiten Mal durch die Triathlon-Abteilung durchgeführt. Mit den Erfahrungen aus dem vergangenen Jahr lief es diesmal richtig flüssig.

November

Schon wieder ein Wochenende in Nürnberg, und schon wieder zum Sport – diesmal nicht nur ein Halbmarathon im Freien sondern ein ganzer Marathon bei der LGA – Indoor versteht sich.
Schon Ende November bin ich mit den Geschenken für den Dezember eingedeckt – dann kann die Vorweihnachtszeit ja kommen – bei mir ja auch immer gepflastert mit einigen Geburtstagen – kurz nach Weihnachten ist dann auch Marion noch an der Reihe. Mich selbst beschenke ich dann auch noch und erfülle mir einen lang gehegten Wunsch – seit Mitte November habe ich nun eine Auto-Erweiterung in Form eines Tadem-Achs-Anhängers, auch wenn die Zulassung etwas mühsamer war als geplant.

Dezember

Wie schon angedeutet, ist der Dezember mit jeder Menge Geburtstagen und Weihnachtsfeiern gepflastert. Aber auch um sich Gedanken zu machen um das kommende Jahr 2014 – sowohl was die Wettkämpfe betrifft aber auch den Urlaub. Der ist fürs kommende Jahr schon geplant, auch die meisten Läufe sind schon angemeldet – es geht mal wieder quer durch die Republik soviel sei schon mal verraten.
Zum ersten Mal habe ich Weihnachten einen Tannenbaum bei mir in die Wohnung gestellt und nicht alleine oder bei meinen Eltern gefeiert. Etwas mehr als 5 Monate sind vergangen und es fühlt sich einfach nur gut an. Ich möchte nicht mehr Single sein.

Ausblick für 2014

So wie es im Moment aussieht steht für 2014 ein Umzug in eine gemeinsame Wohnung an. Mal sehen was das Jahr sonst noch bringt. Infos gibts wie immer hier im Blog.

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.

Umstellung von Webprojekten auf UTF-8

Im letzten Artikel habe ich die Grundlagen zusammengefasst, mit denen ich mich beschäftigen musste um mein aktuelles Projekt voran zu bringen. Das Problem war ursprünglich die nicht einheitliche Handhabung diverser Zeichenketten, was bei Benutzer-Inhalten und Sonderzeichen zum berühmten Mojibake führen konnte (aber eben nicht zwingend muss). Nun denn, gehen wir ans Eingemacht und stellen das Projekt auf UTF-8 um, damit habe ich hoffentlich dann einen wichtigen Schritt in Richtung Zukunftsfähigkeit getan. Außerdem bietet sich UTF-8 wegen seiner Kompatibilität zu ASCII an – Programmcode wird dadurch nicht angetastet und PHP ist dankenswerter Weise sehr einfach gestrickt war Text-Ausgaben mittels “echo” oder ähnlichen Befehlen betrifft: Was hintendran als Argument kommt wird genauso wiedergegeben wie es reingekommen ist – Byte für Byte. Damit hat man wenig Probleme, auch wenn eine Seite eben mal doch Sonderzeichen enthält (wie es im Deutschen leider häufiger der Fall ist). Dieser Post kann als grundlegendes Howto verwendet werden, es gilt jedoch immer: “Keine Garantie” und “your milage may vary”

Erster Schritt – Anpassen der Entwicklungsumgebung

Damit man in Zukunft mit der Entwicklungsumgebung weiterhin einfach arbeiten kann, ohne sich jedesmal Gedanken über irgendwelche Sonderzeichen machen zu müssen – wenn man mal eben drei Zeilen Kommentar schreibt, sollte man sich auf dessen Inhalt konzentrieren können. Je nachdem was man verwendet gibt es da verschiedene Stellen die eingestellt werden müssen. Ich verwende Eclipse, dort kann man das Encoding einmal generell (unter Window -> Preferences -> General -> Workspace:  Text-File-Encoding) einstellen.  Zudem sollte man für die verschiedenen Einträge unter “Content Types” sicherstellen, dass per default dort auch UTF-8 genommen wird. Unter Linux habe ich festgestellt, dass es meistens schon vorab eingestellt ist, denn die meisten aktuellen Linux-Distris sind vom System aus schon löblicherweise auf UTF-8 als Standard umgestellt. Ein Blick in die Äste Web -> CSS Files und Web -> HTML-Files schadet auch nicht. Im Ast XML sollte es per Default auch schon passen, aber Nachgucken schadet auch hier nicht.

Nun muss man noch die Projekt-Einstellungen anpassen (wenn man bestehende Projekte hat) – wenn man den Fehler gemacht hatte und ein neues Projekt angefangen hat ohne sich vorher über die Verwendung von Zeichensätzen Gedanken zu machen (sowas sollte auf jeder Checkliste für Projekte stehen, aber wer achtet da schon drauf wenn es mal eben um eine kleines Projekt geht …. das dann später wächst …). Wenn man die Umstellung gemacht hat, kann man einmal Buchstabensuppe sehen, indem man eine Datei öffnet die Sonderzeichen enthält … die sehen nun etwas komisch aus. Alle händisch ersetzen ist nur was für Hartgesottene oder sehr sehr kleine Projekte.

Zweiter Schritt – Datein umwandeln / umcodieren

Es gibt ein praktisches Tool zum Umwandeln <code>iconv</code> das Werkzeug gibt es auch für Windows, aber so richtig mächtig und scharf wird das erst in Kombination mit ein wenig Scripting (bei mir in Bash)


#!/bin/bash

for file in $(find . -type f -name ‘*.php’)
do
iconv -f iso88591 -t utf8 -o $file.utf8 $file
if [ $? -eq 0 ]
then
#echo “$file erfolgreich”
mv $file.utf8 $file
else
echo $file geht nicht $?
fi
done

Was machen wir und warum mache ich da so? Ersteinmal suche ich alle betroffenen Dateien heraus, da ich mit PHP arbeite sind das alle Dateien die auf <code>.php</code> enden. Jede dieser Dateien lasse ich durch Iconv laufen und als neue Datei abspeichern. Man sollte nicht auf die Idee kommen <code>iconv -f iso88591 -t utf8 -o $file $file</code> zu verwenden. Das klappt nur bei kleinen Dateien. Wenn das nicht der Fall ist, hat man evtl. unvollständige Dateien und wundert sich was passiert ist, denn <code>iconv</code> gibt in diesem Fall keine Fehlerme. Mit dem Speichern in eine separate Datei bleibt das Original erst einmal unberührt und man kann sich ggf. auf die Fehlersuche machen, denn: Wenn beim Konvertieren selbst etwas schiefgeht gibt es einen exit-Code > 0. Wo es geklappt hat, überschreibe ich das Original. Ansonsten ein kleines <code>echo</code> das mir die fehlerhaften Dateien angibt damit man dort nachsuchen kann, meistens hat man schon irgendwo mal etwas als UTF8 gespeichert oder die Zeichensätze verbeult, das findet sich aber meist recht schnell. Bei mir waren es von 500 Dateien zwei Stück die etwas Handarbeit erforderten. Das gleiche Schema kann man auf alle reinen Textdateien anwenden, wenn man es braucht, z.B. reine HTML-Dateien (Endung htm oder html) oder auch JavaScript-Code. Wichtig ist noch dass man seinem Webserver ggf. beibringt, per default auch in UTF-8 auszuliefern. Dazu sucht man in den Konfigurationsdateien die folgende Zeile:

AddDefaultCharset UTF-8

Nach einem Neustart des Daemons wird das dann als default verwendet. Warum aber nur im default-Fall? Klar es gibt noch ne Möglichkeit das einzustellen und zwar in den ganzen HTML-Headern. Dort gibt es das META-Tag mit dem man Vorgaben machen kann auch für den Fall, dass man auf dem Server keinen Zugriff auf die Einstellungen des Apache oder wie auch immer sonst gearteten Webserver-Prozess hat.

&lt;meta equiv="content-type" content="text/html; charset=utf8"&gt;

Damit sollte jeder aktuelle und die allermeisten der älteren Browser in der Lage sein zu erkennen: Jetzt kommt was in UTF8.

Wenn man nur eine statische Website hat, ist man jetzt schon fertig – nur wer hat das schon heute noch?

Datenbankumstellung (MariaDB/MySQL)

Die Website an sich sollte nach der Umstellung weiterhin funktionieren, denn der eingebettete PHP-Code ist besteht nur aus Zeichen des ASCII-Repertoires und ist somit nicht verändert. Über das was zwischen Klammern steht oder einfach “unverdaut” ausgegeben wird, macht PHP sich praktischerweise keine Gedanken sondern gibt es einfach aus, egal wie viel Bytes das sind und ob das nun ein besonderes Zeichen ist oder nicht.

Unlustig sind die Dinge die jetzt noch dynamisch aus der Datenbank nachgeladen werden. Wenn man es bisher (wie häufig bei Standardinstallationen) versäumt hatte auf UTF8 umzustellen, dann muss das jetzt auch noch erfolgen. Ich halte nichts davon die Daten bei jeder Ausgabe in UTF8-Strings zu konvertieren – das ist viel zu viel Aufwand wenn das Projekt eine gewisse Größe erreicht hat. Im übrigen haben viele Leute noch per default den Zeichensatz auf “latin1-swedish” stehen, ein Hinweis woher MySQL denn ursprünglich mal kam. Im 0815-Tagesgeschäft fällt das aber in Europa meist niemandem auf.

Praktischerweise gibt es die Funktion
ALTER TABLE xyz CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]

Damit kann man jeweils eine ganze Tabelle umstellen und eine Collation vorgeben, wir erinnern uns: Collations regeln die Sortierreihenfolge je nach dem wie es gehandhabt werden soll.

Das klingt nicht schlecht und klappt im Allgemeinen auch ganz hervorragend, wenn da nicht einige Fallstricke wären.

Der erste ist ja noch gut gemeint seitens der Engine-Designer: Möglicherweise zu kleine Felder werden in das nächstgrößere Format überführt, wenn der Ausgangszeichensatz einer mit nur einem Byte pro Character ist, der Zielzeichensatz aber mehrere hat oder zumindest haben kann. So werden Textfelder mit bis zu 256 Zeichen zu Mediumtext umgewandelt. Das ist von der Auswirkung her eigentlich zu verschmerzen, aber in meinem Fall habe ich das hinteher wieder manuell korrigiert. richtig problematisch wird das wenn man über die entsprechenden Spalten Indizes angelegt hat, denn Textspalten lassen sich nicht indizieren.

Womit wir beim nächsten Fallstrick wären: An einigen Stellen funktioniert das mit der Umstellung nicht wie geplant, Ursache sind die Foreign-Keys. Ich habe an einigen Stellen “sprechende” Schlüssel anstelle von numerischen verwendet. Gerade dann wenn man in den referenzierten Tabellen wirklich nur Sateliten-Informationen stehen, wie etwa ein Icon und eine ausführliche textuelle Beschreibung zu einem bestimmten Zustand. Einige werden jetzt die Hände über dem Kopf zusammen schlagen, aber ich habe bisher keine negativen Auswirkungen auf die Performance feststellen können, eher positive Effekte bei der Fehlersuche. Wenn man schon anhand des Eintrags in der Tabelle selbst weiß was Sache ist, kann man sich einen zusätzlichen Join sparen. Das hat ja auch seine Vorteile.

Was also tun? Im Netz findet man praktische Anweisungen, die gesamte DB einmal per  mysqldump in eine Textdatei zu konvertieren, dort dann mit iconv das Gleiche zu veranstalten wie mit den Code-Files, danach noch die Tabellen-Definitionen automatisiert anpassen und den Dump wieder in die Datenbank kippen. Das funktioniert, ist aber bei größeren Datenmengen unhandlich.

Stattdessen habe ich mir die Information-Schema-Tabellen zu Nutze gemacht: dort stehen die Meta-Informationen zu den Tabellen in Tabellen, die man wie gewohnt mit SQL-Befehlen lesen kann – schreiben leider nicht, aber immerhin etwas. Dort sucht man sich nun die betroffenen Spalten und Tabellen heraus (Varchars und Texte), zudem schaut man auf die Foreign-Keys und merkt sich diese. Dann schmeißt man die Foreign Keys weg, führt die Veränderungen an den Tabellen durch (das geht ja dann). Wenn das durchgelaufen ist, kann man noch die vergrößerten Spalten wieder auf die Original-Größe zurück setzen (also Mediumtext => Text usw). Zu guter Letzt schaltet man die Foreign-Keys die man sich gemerkt hat wieder scharf. Fertig ist die Laube. Ganz so einfach ist es im Detail nicht, denn man muss stets vollständige Spaltendefinitionen verwenden, einfach nur den Typ ändern geht so leider nicht, auch wenn das eine praktische Sache wäre.

Jetzt hat man das gesamte Projekt umgestellt – zumindest was die Datenbasis und was die HTML-Seiten und den eingebetteten JS-Code betrifft. Das ist in aller Regel alles was man braucht.

Was noch an Problemen auftreten kann, beschreibe ich in einem weiteren Artikel. Stichwort sind hier externe Libraries und Frameworks.