Ich habe eine Datenbank neu gestaltet, die ISO 8601-Daten im Format 2012-10-27T07:30:38+00:00
in ein varchar-Feld importiert. Die aktuelle Datenbank wird auf einem MySQL 5.5 Server gehostet.
Beim Durchsuchen der Dokumentation und verschiedener SO-Posts habe ich keine definitive Antwort darauf gefunden, welchen Datentyp ich in MySQL für diesen Zweck verwenden soll. Der nächste Beitrag ist: MySQL einfügen zu DATETIME: ist es sicher, ISO :: 8601-Format zu verwenden? , wo es eine Art von Arbeit bietet, aber dies ist keine wünschenswerte Option.
Die MySQL-Dokumentation ( Ссылка ) sagt nicht und die einzige Referenz, die ich in der offiziellen Dokumentation finden kann, finden Sie auf der Seite: Ссылка
was besagt "Die möglichen Werte für das erste und zweite Argument ergeben mehrere mögliche Formatzeichenfolgen (für die verwendeten Spezifizierer siehe Tabelle in der Funktionsbeschreibung DATE_FORMAT ()). ISO-Format bezieht sich auf ISO 9075, nicht auf ISO 8601. "
Jetzt wird in der PostgreSQL-Dokumentation speziell auf ISO8601 ( Ссылка und Ссылка ) was mich zu meiner Frage führt:
Unterstützt MySQL korrekt ISO 8601 oder sollte ich eine Datenbank mit systemeigener Unterstützung in Betracht ziehen?
- Bearbeiten -
Wenn Sie versuchen, den obigen Beispiel-Zeitstempel in eine Datetime-Spalte einzufügen, wird der folgende Fehler angezeigt:
%Vor% Speichern Sie keine Datums- oder Zeitstempelwerte in einer varchar-Spalte. Sie können nicht sicherstellen, dass ein korrekter Wert gespeichert wird (niemand verhindert, dass Sie 2012-02-31 28:99:70
dort speichern.)
Wenn Sie den Zeitteil nicht benötigen, verwenden Sie einen date
-Datentyp (verfügbar in MySQL und PostgreSQL), wenn Sie die Zeit benötigen, verwenden Sie einen timestamp
(oder datetime
in MySQL) -Datentyp.
Die Formatierung der Werte sollte in Ihrem Frontend erfolgen oder wenn Sie es unbedingt in SQL machen müssen, indem Sie z. to_char () (oder das Äquivalent in MySQL) beim Abrufen der Werte.
Noch einmal: Speichern Sie niemals Datums- oder Zeitstempel in einem Varchar (genau so, wie Sie niemals echte Zahlen in einer Varchar-Spalte gespeichert haben sollten).
Hier ist die MySQL-Übersicht für Datum / Uhrzeit-Datentypen: Ссылка
Hier ist die PostgreSQL-Übersicht für date7time-Datentypen: Ссылка
Bearbeiten
Wenn Sie Bedenken hinsichtlich des wörtlichen Formats haben. Beide DBMS unterstützen die Standard-ANSI-Datums- und Zeitstempel-Literale:
%Vor%SQLFiddle für PostgreSQL: Ссылка
Beachten Sie die Schlüsselwörter timestamp
und date
vor dem Zeichenliteral.
Bearbeiten 2
Es scheint, dass MySQL einen solchen Wert nicht einfügen kann, obwohl das Literal in einer SELECT-Anweisung verwenden kann:
Postgresql kann dieses Format verarbeiten:
ohne
%Vor%oder mit Zeitzone:
%Vor%Während MySQL scheint sich um den Zeitzonenteil nicht zu kümmern:
%Vor%Ein weiterer Vorteil der Verwendung von datetime oder timestamp zum Speichern. In phpMyAdmin oder phpPgAdmin wird der Wert als String angezeigt, z. 2015-01-22 11:13:42. So ist es viel einfacher, ein Datum zu finden, als wäre es als varchar oder int gespeichert.
Und ich denke, es ist wichtig, welche Zeitzone der Server hat. Ich habe gesehen, dass ein Zeitstempel in MySql Mikrosekunden nicht anzeigt. Ich weiß, dass MySQL UTC-Time für Timestamp- und Datetime-Felder verwendet. Stellen Sie also die Werte als UTC-Zeitstempel zur Verfügung.
Das ISO 8601 Datumsformat "YYYY-MM-DD" wird von MySQL bei der Anzeige von Datumswerten intern ausgegeben und es kann sie genauso importieren.
Diese sind "American Style" -Daten wie "MM / DD / YY" vorzuziehen, wo es zu viele Zweideutigkeiten gibt, die automatisch aufgelöst werden können.
ISO 9075 scheint sich auf die Gesamtheit des SQL-Standards zu beziehen, nicht auf ein bestimmtes Datumsformat, obwohl der Standard selbst eine Standardformatierung für Datums- und Zeitangaben hat.
Tags und Links mysql postgresql iso8601