1. Was ist MySQLs DATETIME?
MySQLs DATETIME ist ein Datentyp, der dazu dient, sowohl Datums‑ als auch Zeitwerte gleichzeitig zu verarbeiten. Das Verwalten von Datum und Uhrzeit in einer Datenbank ist für verschiedene Anwendungen entscheidend, etwa für Protokollierung oder Reservierungssysteme. Der DATETIME‑Typ speichert sowohl Datum als auch Zeit in einem einzigen Feld und kann einen weiten Wertebereich abdecken, von '1000-01-01 00:00:00' bis '9999-12-31 23:59:59', und 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 zur Handhabung von Datum und Zeit bereit:
DATE: Ein Datentyp zur Behandlung von Datumsangaben (Jahr, Monat, Tag). Der Bereich reicht von'1000-01-01'bis'9999-12-31'.TIME: Ein Datentyp zur Behandlung von reinen Zeitangaben. Der Bereich reicht von'-838:59:59'bis'838:59:59'.DATETIME: Ein Datentyp, der sowohl Datum als auch Zeit kombiniert. Der Bereich reicht von'1000-01-01 00:00:00'bis'9999-12-31 23:59:59'.TIMESTAMP: Ein Datentyp zur Speicherung von UNIX‑Zeitstempeln. Der Bereich reicht von'1970-01-01 00:00:01'bis'2038-01-19 03:14:07'.
2.2 Unterschiede zwischen DATETIME und TIMESTAMP
Obwohl DATETIME und TIMESTAMP ähnlich sind, gibt es folgende wesentliche Unterschiede:
- Zeitzone :
DATETIMEspeichert einen festen Wert, der unabhängig von der Zeitzone ist. Im Gegensatz dazu werdenTIMESTAMP‑Werte beim Speichern in UTC konvertiert und beim Abrufen wieder in die aktuelle Zeitzone des Servers zurückgerechnet. Daher eignet sichDATETIMEfür Daten und Zeiten, die nicht von Zeitzonen beeinflusst werden (z. B. Veranstaltungszeiten), währendTIMESTAMPbesser für datenbezogene Informationen geeignet ist, die von der Server‑Zeitzone abhängen, etwa Protokolleinträge. - Speicherformat :
DATETIMEwird in seiner exakten Darstellung gespeichert, währendTIMESTAMPals UNIX‑Zeitstempel abgelegt wird. Folglich wird die Darstellung vonTIMESTAMPdurch die Zeitzoneneinstellungen des Servers beeinflusst.
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 erstellen wir eine DATETIME‑Spalte namens event_time in einer Tabelle namens sample_table.
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');
Weitere zulässige Formate sind:
'YY-MM-DD HH:MM:SS': Ein Format, das das Jahr mit zwei Ziffern angibt.'YYYYMMDDHHMMSS': Ein Format, das Werte ohne Trennzeichen angibt.
Beispiele:
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, werden '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 Ihrer Tabelle im Standardformat aus.
4. Umgang mit Bruchteilen von Sekunden
4.1 DATETIME‑Präzision
MySQL ermöglicht das Einbinden von Bruchteilen von Sekunden in DATETIME‑Werten. Sie können die Präzision über die Option fsp festlegen, die das Speichern von Bruchteilen im Bereich von 0 bis 6 erlaubt. Beispielweise, um eine Spalte mit drei Dezimalstellen für Bruchteile von Sekunden zu erstellen:
CREATE TABLE precise_times (
event_time DATETIME(3)
);
In diesem Beispiel kann die Spalte event_time bis zu drei Stellen für Bruchteile von Sekunden speichern.
4.1 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 Werte inklusive Bruchteilssekunden präzise. Der eingefügte Bruchteil wird ohne Kürzung gespeichert, und seine Präzision wird beim Abrufen beibehalten.

5. Best Practices für DATETIME
5.1 Wann DATETIME vs. TIMESTAMP verwenden
- Verwenden Sie
DATETIME, wenn : Festgelegte Daten und Zeiten gespeichert werden sollen, die unabhängig von Zeitzonen sind (z. B. Veranstaltungsbeginn, Reservierungsdaten). - Verwenden Sie
TIMESTAMP, wenn : Datum‑ und Zeitdaten gespeichert werden sollen, die mit der Zeitzone des Servers verknüpft sind (z. B. Erstellungs‑ oder Aktualisierungszeitpunkte).
5.2 Verwaltung von Zeitzonen
Da DATETIME kein Konzept von Zeitzonen hat, muss die Zeitzonenverwaltung von der Anwendung übernommen werden. Im Gegensatz dazu berücksichtigt TIMESTAMP automatisch die Zeitzone des Servers beim Speichern und Abrufen von Werten, was es für Vorgänge über verschiedene Zeitzonen weltweit hinweg geeignet macht.
6. Häufige Fehler und wie man sie vermeidet
6.1 Null‑Daten und ungültige Werte
In MySQL führt der Versuch, einen ungültigen DATETIME‑Wert einzufügen, dazu, dass ein „Null‑Datum“ von '0000-00-00 00:00:00' gespeichert wird. Da dies im Allgemeinen kein gültiges Datum ist, ist es wichtig, die Eingabedaten zu validieren, um das Einfügen ungültiger Werte zu verhindern. Durch die Implementierung einer Validierung, die sicherstellt, dass Eingabedaten den entsprechenden Bereichen und Formaten entsprechen, kann das Speichern von Null‑Daten vermieden werden.
6.2 Fehlgebrauch von Präzision
Beim Festlegen der Präzision für Bruchteilssekunden kann eine falsche Angabe zu unerwarteten Ergebnissen führen. Geben Sie die Präzision für Bruchteilssekunden nur dann an, wenn sie wirklich benötigt wird, und setzen Sie den fsp‑Wert sorgfältig. Wenn Ihre Anwendung keine Untersekunden‑Präzision benötigt, müssen Sie für Ihre DATETIME‑Spalte keine Bruchteilssekunden festlegen.
7. Fazit
Dieser Artikel bietet eine ausführliche Erklärung des MySQL‑Datentyps DATETIME. DATETIME ist ein äußerst nützlicher Datentyp, um gleichzeitig Datum und Zeit zu verwalten und dabei von Zeitzonen unbeeinflusst zu bleiben. Durch das Verständnis der Unterschiede zwischen DATETIME und TIMESTAMP, der Zeitzonen‑Handhabung und der Verwendung von Bruchteilssekunden können Sie Datum‑ und Zeitdaten in Ihrer Datenbank effektiv verwalten. Darüber hinaus hilft das Wissen um häufige Fehler und deren Vermeidung, Datenkonsistenz und Zuverlässigkeit zu gewährleisten.
8. Häufig gestellte Fragen (FAQ)
Q1: Was sind die Hauptunterschiede zwischen DATETIME und TIMESTAMP?
DATETIME speichert ein festes Datum und eine feste Uhrzeit, unabhängig von Zeitzonen. Zum Beispiel eignet es sich für die Speicherung von Reservierungsdaten oder Veranstaltungszeiten, die in allen Zeitzonen gleich bleiben. Im Gegensatz dazu wird TIMESTAMP auf Basis von UTC gespeichert und bei der Abfrage in die Zeitzone des Servers umgerechnet. Es eignet sich für zeitkritische Daten wie Protokolleinträge, die von der Server‑Zeitzone abhängen.
Q2: Wie kann ich Bruchteilssekunden mit DATETIME speichern?
Beim Erstellen einer DATETIME‑Spalte können Sie die Präzision für Bruchteilssekunden festlegen, indem Sie den fsp‑Wert angeben. Beispielsweise ermöglicht DATETIME(3) das Speichern von Bruchteilssekunden bis zu drei Dezimalstellen. Beim Einfügen verwenden Sie einen Wert, der Bruchteilssekunden enthält, und er wird im entsprechenden Format gespeichert.
Q3: Sollte ich DATETIME oder TIMESTAMP verwenden?
Das hängt vom Anwendungsfall ab. Verwenden Sie DATETIME, wenn Sie ein festes Datum und eine feste Uhrzeit speichern möchten. Verwenden Sie hingegen TIMESTAMP für Datum‑ und Zeitdaten, die von der Zeitzone des Servers beeinflusst werden, etwa bei der Erstellung oder Aktualisierung von Daten. TIMESTAMP ist geeignet, wenn eine automatische Zeitzonenkonvertierung erforderlich ist, insbesondere für Vorgänge über verschiedene Zeitzonen hinweg.


