Meine Herren!
Die MySQL-Doku zu Datums- und Zeitfunktionen sagt, dass das System Datumsangaben im Format Y-m-d (2014-09-21; hey, übermorgen ist Herbstanfang) ab dem Jahr 1000 akzeptiert. Ich habe in ein DATE-Feld testweise Jahreszahlen unterhalb 1000 eingetragen (Beispiel: 0793-06-08) und diese werden komischerweise, im Gegensatz zu den Angaben in der Doku, auch akzeptiert.
In der Dokumentation wird auch darauf hingewiesen, dass frühere Daten unterstützt werden könnten, aber dass das eben nicht unter Garantie so sein muss. Aber selbst wenn der Datenbank-Server damit zurecht kommt, könnten höhere Software-Schichten ihre Probleme damit haben. Man könnte etwa den MySQL-Treiber fürs PHPs Datenbank-Abstraktionsschicht PDO als Beispiel für eine solche Software heranziehen. Ob es jetzt mit genau diesem Treiber ein Porblem gibt, weiß ich nicht. In den Nutzerkommentaren äußert ein Nutzer jedenfalls Probleme mit dem MySQL-Treiber für ODBC. Dieser scheint die strikte Einhaltung des Wertebereichs obligatorisch zu machen. Vielleicht verhalten sich verschiedene Storage-Engines in diesem Punkt auch unterschiedlich. Der Punkt den ich hier markieren will: Wenn du dich auf die korrekte Handhabung verlassen musst, dann verlass dich nicht nur auf den MySQL-Server.
Hat hier jemand Ideen, wie ich geschichtliche Daten inklusive Datum abspeichern kann?
Jedenfalls nichts schöneres, als die Möglichkeiten, die du selber schon recherchiert hast. Du könntest aber auch ein int-Feld nehmen und dort einen tagesgenauen Zeitstempel speichern. Dann bietet sich natürlich eine renommierte Tageszählung an.
Alle drei Methoden, die jetzt im Raum schweben, sind eher Hacks, als saubere Lösungen. Vielleicht solltest du es künstlich erschweren, mit diesen Hack zu arbeiten, damit nicht zu leichtfertig fahrlässige Fehler passieren. Du könntest z.B. Blobs statt näher bestimmten Typen benutzen. Du könntest auch das Datum von der eigentliche Tabelle trennen und einen View bauen, der die die Datensätze wieder zusammenführt. So ist das Auslesen über den View recht bequem, aber es ist schwieriger Datensätzen einzufügen oder zu manipulieren. Außerdem kannst du Spalten-Kommentare nutzen, um eine Hilfestellung zu geben, wie mit dem Hack zu arbeiten ist, bzw. an dieser Stelle auf die Dokumentation des Hacks verweisen. Für wiederkehrende Funktionalität, wie die Differenzbildung, könntest du eigene MySQL-Funktionen schreiben.
“All right, then, I'll go to hell.” – Huck Finn