Ich erstelle eine Datenbank für Datensätze, die sich vor 1000 AD erstrecken, aber die Felder MySQL Date und DateTime unterstützen nur Datumsangaben ab 1000.
Gibt es eine Möglichkeit, die bequemer ist, als entweder einen Bigint-Typ zu verwenden, um Sekunden vor / nach dem 1.1.1970 mithilfe eines Unix-Zeitstempels zu zählen, oder zu einer Datenbanksoftware zu wechseln, die größere Datumsbereiche unterstützt?
mysql
database-design
best-practices
timestamp
date-format
David LeBauer
quelle
quelle
Antworten:
Eine Alternative besteht darin, jeden Teil des Datums in einem numerischen Feld zu speichern. Sie hätten also drei Felder:
Auf diese Weise wäre es immer noch für Menschen lesbar. Der Wertebereich für verschiedene numerische Datentypen in MySQL finden Sie unter Übersicht über numerische Typen . Die Speicheranforderungen finden Sie unter Datentyp-Speicheranforderungen .
quelle
Kein nativer RDBMS-Datumsdatentyp wird für Anwendungen verwendet, die sehr alte (und für einige, sogar entfernte zukünftige) Daten erfordern.
Wenn ich Sie wäre, würde ich einen Zeichenfolgentyp für den nativen Speicher verwenden und mich an ein ortsrelevantes Format halten, z. B.: + JJJJ-MM-TT, um BC / AD und jedes vorhersehbare historische oder vernünftige zukünftige Datum aufzunehmen.
Wenn es helfen könnte, könnten Sie eine Bibliotheksklasse erstellen, die Ihr internes Speicherformat in ein ansehnlicheres für die UI-Ebene konvertiert. Sie können sogar Bibliotheksfunktionen einschließen, die in einen nativen Datumstyp konvertiert werden, wenn Ihre bevorzugte Sprache die Daten unterstützt, die Sie in Ihrer Datenbank haben werden.
quelle
CHECK
Einschränkung empfehlen , um ein Datumszeichenfolgenformat zu erzwingen. Leider erzwingt MySQL keineCHECK
Einschränkungen.BIT
oder eineBOOLEAN
Spalte hinzufügen , um die Datumspolarität anzuzeigen. :) Wenn Sie das tun, sind Sie natürlich auf sich allein gestellt, wenn Sie Berechnungen an diesen "BC" -Daten durchführen. Wer weiß, welche Art von Kalenderanpassungen, die normalerweise von Bibliotheksfunktionen für uns vorgenommen werden, bei der Manipulation der "falschen" BC-DatenWie wäre es mit einem einzelnen Float-Feld in einer Tabelle, in dem Daten in numerischem Format gespeichert werden, z. B. 2015-10-12 10:12:05, wird 20151012 gespeichert. 101205. Es ist immer besser, nach einem einzelnen Feld zu sortieren, anstatt 3 oder mehr zu haben unterschiedliche Gebiete.
Die obige Logik funktioniert für einige Szenarien nicht. Daher haben wir das Datum in Sekunden umgerechnet, wobei 1 Tag = 86400 Sekunden berücksichtigt wurde. Wird für BC-Daten negativ verwendet. Es funktioniert wie erwartet.
quelle