1. Was ist MySQL DATETIME?
MySQL DATETIME ist ein Datentyp, der sowohl Datum als auch Uhrzeit in einem einzigen Feld speichert. Das Verwalten von Datums‑ und Zeitwerten in einer Datenbank ist für viele Anwendungen unerlässlich, z. B. für Protokoll‑ und Reservierungssysteme. Der Typ DATETIME speichert Datum und Uhrzeit zusammen und unterstützt einen weiten Wertebereich. Sein Bereich reicht von '1000-01-01 00:00:00' bis '9999-12-31 23:59:59' und er unterstützt zudem Bruchteile von Sekunden.
2. Überblick über MySQL‑Datums‑ und Zeitdatentypen
2.1 Datentypen zur Handhabung von Datum und Zeit
MySQL stellt die folgenden Datentypen für die Arbeit mit Datum und Zeit bereit:
DATE: Speichert ein Datum (Jahr, Monat, Tag). Der Bereich ist'1000-01-01'bis'9999-12-31'.TIME: Speichert nur die Uhrzeit. Der Bereich ist'-838:59:59'bis'838:59:59'.DATETIME: Speichert sowohl Datum als auch Uhrzeit. Der Bereich ist'1000-01-01 00:00:00'bis'9999-12-31 23:59:59'.TIMESTAMP: Speichert einen UNIX‑Zeitstempel. Der Bereich ist'1970-01-01 00:00:01'bis'2038-01-19 03:14:07'.
2.2 Unterschiede zwischen DATETIME und TIMESTAMP
DATETIME und TIMESTAMP sind ähnlich, weisen jedoch die folgenden Unterschiede auf:
- Zeitzone :
DATETIMEspeichert einen festen Wert, der nicht von Zeitzonen abhängt. Im Gegensatz dazu wirdTIMESTAMPbeim Speichern in UTC konvertiert und beim Abrufen in die aktuelle Zeitzone des Servers zurückgerechnet. Deshalb eignet sichDATETIMEfür zeitzonenunabhängige Datums‑/Zeitwerte (z. B. Veranstaltungszeiten), währendTIMESTAMPfür Daten geeignet ist, die an die Serverzeitzone gebunden sind, wie Protokolle. - Speicherformat :
DATETIMEwird unverändert gespeichert, währendTIMESTAMPals UNIX‑Zeitstempel abgelegt wird. Dadurch werdenTIMESTAMP‑Werte von den Zeitzoneneinstellungen des Servers beeinflusst, wenn sie Zeit darstellen.
3. Verwendung von DATETIME in MySQL
3.1 Erstellen einer DATETIME‑Spalte
Um eine Spalte vom Typ DATETIME zu erstellen, verwenden Sie die folgende SQL‑Syntax:
CREATE TABLE sample_table (
event_time DATETIME
);
In diesem Beispiel wird eine DATETIME‑Spalte namens event_time in einer Tabelle namens sample_table angelegt.
3.2 Einfügen von DATETIME‑Werten
MySQL‑DATETIME‑Werte können in verschiedenen Formaten eingefügt werden. Das Grundformat ist 'YYYY-MM-DD HH:MM:SS'. Zum Beispiel:
INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');
Folgende Formate sind ebenfalls zulässig:
'YY-MM-DD HH:MM:SS': Ein Format mit zweistelligem Jahr.'YYYYMMDDHHMMSS': Ein Format ohne Trennzeichen.
Beispiel:
INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);
Daten, die in diesen Formaten eingefügt werden, werden korrekt gespeichert. Wird das Jahr mit zwei Ziffern angegeben, wird '70-99' in 1970‑1999 und '00-69' in 2000‑2069 umgewandelt.
3.3 Abrufen von DATETIME‑Werten
Beim Abrufen von DATETIME‑Werten zeigt MySQL sie im Standardformat 'YYYY-MM-DD HH:MM:SS' an. Zum Beispiel:
SELECT event_time FROM sample_table;
Diese Abfrage gibt die Werte der DATETIME‑Spalte im Standardformat aus.
4. Arbeiten mit Bruchteilen von Sekunden
4.1 DATETIME‑Präzision
In MySQL können DATETIME‑Werte Bruchteile von Sekunden enthalten. Sie können die Präzision über die Option fsp festlegen, die das Speichern von Bruchteilen von 0 bis 6 Stellen ermöglicht. Beispiel: Eine Spalte mit 3 Stellen für Bruchteile von Sekunden erstellen:
CREATE TABLE precise_times (
event_time DATETIME(3)
);
In diesem Beispiel kann die Spalte event_time Bruchteile von Sekunden bis zu 3 Stellen speichern.
4.2 Einfügen von Werten mit Bruchteilen von Sekunden
Um einen DATETIME‑Wert einzufügen, der Bruchteile von Sekunden enthält, verwenden Sie Folgendes:
INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');
Diese Abfrage speichert den Wert inklusive Bruchteile von Sekunden genau. Der Bruchteil wird ohne Abschneiden gespeichert, und die Genauigkeit wird beim Abrufen des Werts erhalten.

5. Best Practices für DATETIME
5.1 Wahl zwischen DATETIME und TIMESTAMP
- Wann
DATETIMEverwenden : Für feste Datum/Zeit-Werte, die nicht von Zeitzonen abhängen (z. B. Startzeiten von Veranstaltungen oder Reservierungsdaten). - Wann
TIMESTAMPverwenden : Für Datum/Zeit-Daten, die mit der Server-Zeitzone zusammenhängen (z. B. Zeitstempel für die Erstellung oder Aktualisierung von Datensätzen).
5.2 Zeitzonen-Management
Da DATETIME keine Zeitzoneninformationen speichert, muss Ihre Anwendung Zeitzonen separat verwalten. Andererseits berücksichtigt TIMESTAMP automatisch die Server-Zeitzone beim Speichern und Abrufen von Werten, was es für Systeme geeignet macht, die weltweit in unterschiedlichen Zeitzonen betrieben werden.
6. Häufige Fehler und wie man sie vermeidet
6.1 Null-Daten und ungültige Werte
In MySQL wird bei dem Versuch, einen ungültigen DATETIME-Wert einzufügen, möglicherweise ein Null-Datum wie '0000-00-00 00:00:00' gespeichert. Da dies in der Regel kein gültiges Datum ist, sollten Sie Eingabedaten validieren, um zu verhindern, dass ungültige Werte eingefügt werden. Die Implementierung einer Validierung, die sicherstellt, dass die Eingabe den korrekten Bereich und das Format einhält, kann helfen, das Speichern von Null-Daten zu verhindern.
6.2 Fehlverwendung der Genauigkeit
Beim Angeben der Genauigkeit für Bruchteile von Sekunden kann die Verwendung der falschen Genauigkeit zu unerwarteten Ergebnissen führen. Setzen Sie die Genauigkeit für Bruchteile von Sekunden nur, wenn es notwendig ist, und wählen Sie den fsp-Wert sorgfältig aus. Zum Beispiel benötigen Sie, wenn Ihre Anwendung keine Unter-Sekunden-Genauigkeit erfordert, keine Bruchteile von Sekunden in einer DATETIME-Spalte hinzuzufügen.
7. Zusammenfassung
In diesem Artikel haben wir den DATETIME-Typ von MySQL detailliert erklärt. DATETIME ist ein sehr nützlicher Datentyp zum Speichern von Datum und Zeit und eignet sich, wenn Sie Werte speichern müssen, die nicht von Zeitzonen beeinflusst werden sollten. Durch das Verständnis der Unterschiede zwischen DATETIME und TIMESTAMP, der Funktionsweise von Zeitzonen und der Verwendung von Bruchteilen von Sekunden können Sie Datum/Zeit-Daten in Ihrer Datenbank effektiver verwalten. Darüber hinaus hilft das Wissen über häufige Fehler und wie man sie vermeidet, die Datenkonsistenz und -zuverlässigkeit aufrechtzuerhalten.
8. Häufig gestellte Fragen (FAQ)
Q1: Was ist der Hauptunterschied zwischen DATETIME und TIMESTAMP?
DATETIME speichert ein festes Datum und eine feste Zeit, die nicht von Zeitzonen abhängt. Zum Beispiel eignet es sich zum Speichern von Reservierungsdaten oder Veranstaltungszeiten, die in jeder Zeitzone gleich bleiben sollten. Im Gegensatz dazu wird TIMESTAMP in UTC gespeichert und beim Abrufen in die Server-Zeitzone umgewandelt. Es eignet sich für Datum/Zeit-Daten, die von der Server-Zeitzone abhängen, wie z. B. Logs.
Q2: Wie kann ich Bruchteile von Sekunden mit DATETIME speichern?
Sie können die Genauigkeit für Bruchteile von Sekunden festlegen, indem Sie beim Erstellen der DATETIME-Spalte einen fsp-Wert angeben. Zum Beispiel speichert DATETIME(3) Bruchteile von Sekunden bis zu 3 Stellen. Verwenden Sie beim Einfügen einen korrekt formatierten Wert inklusive Bruchteile von Sekunden, und er wird korrekt gespeichert.
Q3: Sollte ich DATETIME oder TIMESTAMP verwenden?
Das hängt von Ihrem Anwendungsfall ab. Verwenden Sie DATETIME, wenn Sie ein festes Datum und eine feste Zeit speichern möchten. Verwenden Sie TIMESTAMP für Datum/Zeit-Daten, die von der Server-Zeitzone beeinflusst werden, wie z. B. Erstellungs- oder Aktualisierungszeiten von Datensätzen. Da TIMESTAMP eine automatische Zeitzonenkonvertierung durchführt, eignet es sich, wenn Ihr System in unterschiedlichen Zeitzonen betrieben werden muss.

