Der Unterschied zwischen Datenzeit und Zeitstempel in MySQL

Der Unterschied zwischen Datenzeit und Zeitstempel in MySQL

In MySQL gibt es drei Datumstypen:

Datum (Jahr-Monat-Tag)

Tabelle „Test (Einstellungsdatum)“ erstellen;

datetime (Datum/Uhrzeit-Typ)

Tabelle „Test“ erstellen (Einstellungsdatum, Datum/Uhrzeit)

Zeitstempel (Poststempeltyp, speichert Jahr-Monat-Tag Stunde-Minute-Sekunde)

Tabelle „Test“ erstellen (Zeitstempel des Einstellungsdatums)

Unterschiede zwischen Datum und Uhrzeit und Zeitstempel

1. Die Speichermethoden der beiden sind unterschiedlich

Für TIMESTAMP konvertiert es die vom Client eingegebene Zeit zur Speicherung von der aktuellen Zeitzone in UTC (Koordinierte Weltzeit). Bei der Abfrage wird diese in die aktuelle Zeitzone des Clients umgerechnet und zurückgegeben. Für DATETIME werden keine Änderungen vorgenommen und die Ein- und Ausgabe erfolgt grundsätzlich unverändert.

2. Der von beiden gespeicherte Zeitbereich ist unterschiedlich

Der Zeitbereich, den der Zeitstempel speichern kann, ist: „1970-01-01 00:00:01.000000“ bis „2038-01-19 03:14:07.999999“.

Der Zeitbereich, den datetime speichern kann, ist: „1000-01-01 00:00:00.000000“ bis „9999-12-31 23:59:59.999999“.

Zusammenfassung: TIMESTAMP und DATETIME unterscheiden sich außer in ihrem Speicherbereich und ihrer Speichermethode nicht wesentlich. Natürlich ist TIMESTAMP für Geschäfte über Zeitzonen hinweg besser geeignet.

3. Automatische Initialisierung und Aktualisierung

Automatische Initialisierung bedeutet, dass, wenn dem Feld (wie etwa dem Feld „hiredate“ im obigen Beispiel) keine explizite Zuweisung vorliegt, es automatisch auf die aktuelle Systemzeit gesetzt wird.

Automatische Aktualisierung bedeutet, dass bei Änderungen anderer Felder der Wert dieses Feldes automatisch auf die aktuelle Systemzeit aktualisiert wird.

Es hängt mit dem Parameter „explicit_defaults_for_timestamp“ zusammen.

Standardmäßig ist der Wert dieses Parameters OFF

mysql> Variablen wie „%explicit_defaults_for_timestamp%“ anzeigen;
+---------------------------------+--------+
| Variablenname | Wert |
+---------------------------------+--------+
| explizite_Vorgaben_für_Zeitstempel | AUS |
+---------------------------------+--------+
Zeile im Satz (0,00 Sek.)

Zusammenfassung: Der Zeitstempel wird automatisch initialisiert und aktualisiert. Wenn Sie einen Datensatz aktualisieren, wird der Spaltenwert automatisch aktualisiert. Dies ist der größte Unterschied zu Datatime.

Ergänzung: Einige Unterschiede und Probleme zwischen DATETIME und TIMESTAMP

Ich bin heute auf ein Problem gestoßen. Obwohl die Daten aktualisiert wurden, blieb das Feld update_time immer noch auf dem Stand, als die Daten erstellt wurden.

Normalerweise sollte dieses Feld automatisch aktualisiert werden.

Habe die Tabellenstruktur geprüft.

`update_time` datetime NICHT NULL STANDARD CURRENT_TIMESTAMP

Es wurde festgestellt, dass der Typ des Felds update_time datetime ist

Dies wirft zwei Fragen auf: (1) den Unterschied zwischen Zeitstempel und Datum/Uhrzeit; (2) warum CURRENT_TIMESTAMP für Datum/Uhrzeit-Typen verwendet werden kann

Der Unterschied zwischen Zeitstempel und Datum/Uhrzeit

a) Der Standardwert von DATETIME ist null; der Standardwert des Felds TIMESTAMP ist nicht null (nicht null) und der Standardwert ist die aktuelle Zeit (CURRENT_TIMESTAMP). Wenn keine spezielle Verarbeitung erfolgt und der Aktualisierungswert der Spalte nicht in der Aktualisierungsanweisung angegeben ist, ist die aktuelle Zeit der Standardaktualisierungswert.

Dieser Unterschied erklärt, warum wir die automatische Aktualisierung dieses Felds normalerweise nicht verwalten müssen, da wir meistens einen Zeitstempel verwenden. Hier verwenden wir Datum und Uhrzeit, und es gibt keinen Mechanismus zur automatischen Aktualisierung der aktuellen Uhrzeit. Daher müssen wir dieses Feld in der oberen Ebene manuell aktualisieren.

b) DATETIME benötigt 8 Byte Speicherplatz und TIMESTAMP benötigt 4 Byte Speicherplatz. Daher ist TIMESTAMP platzsparender als DATETIME.

Dieser Unterschied erklärt, warum der Zeitstempeltyp häufiger verwendet wird.

c) Die Speichermethoden der beiden sind unterschiedlich. Für TIMESTAMP konvertiert es die vom Client eingegebene Zeit zur Speicherung von der aktuellen Zeitzone in UTC (Coordinated Universal Time). Bei der Abfrage wird diese in die aktuelle Zeitzone des Clients umgerechnet und zurückgegeben. Für DATETIME werden keine Änderungen vorgenommen und die Ein- und Ausgabe erfolgt grundsätzlich unverändert.

d) Der speicherbare Zeitbereich ist unterschiedlich

Der Zeitbereich, den der Zeitstempel speichern kann, ist: „1970-01-01 00:00:01.000000“ bis „2038-01-19 03:14:07.999999“;

Der Zeitbereich, den datetime speichern kann, ist: „1000-01-01 00:00:00.000000“ bis „9999-12-31 23:59:59.999999“.

Warum kann CURRENT_TIMESTAMP für Datums-/Uhrzeittypen verwendet werden?

In Versionen vor MySQL 5.6 kann CURRENT_TIMESTAMP nur für Zeitstempeltypen verwendet werden.

Ab Version 5.6 kann CURRENT_TIMESTAMP auch für Datetime-Typen verwendet werden

Ich habe die Datenbank mit select version() überprüft und festgestellt, dass die Version 5.6.29 ist

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der TIMESTAMP-Verwendung in MySQL
  • Verwendung der MySQL-Zeitdifferenzfunktionen TIMESTAMPDIFF und DATEDIFF
  • MySQL-Datentyp TIMESTAMP

<<:  Absatzlayout und Zeilenumbrüche in HTML-Webseiten

>>:  Warum Nginx besser ist als Apache

Artikel empfehlen

Nodejs-Fehlerbehandlungsprozessaufzeichnung

In diesem Artikel wird der Verbindungsfehler ECON...

Installations-Tutorial zur neuesten MySQL-Version 8.0.17 mit Dekomprimierung

Ich persönlich denke, dass die dekomprimierte Ver...

Prozessdiagramm für das erste Bereitstellungs-Webprojekt von Tomcat

Legen Sie Ihr eigenes Webprojekt im Verzeichnis w...

Zusammenfassung der Erfahrungen beim Website-Erstellen

<br />Welche Grundsätze sollten beachtet wer...

Detaillierte Analyse der SQL-Ausführungsschritte

Detaillierte Analyse der SQL-Ausführungsschritte ...

Super detaillierter GCC-Upgrade-Prozess unter Linux

Inhaltsverzeichnis Vorwort 1. Aktuelle gcc-Versio...

Analyse des HTML-Schreibstils und Gründe erfahrener Leute

1. Navigation: Ungeordnete Liste vs. andere Besch...

Detaillierte Erklärung der Webseiten-Screenshot-Funktion in Vue

Seit Kurzem besteht im Projekt die Anforderung, B...

MySQL-Einfügungsproblem bei JSON

MySQL 5.7.8 und höher unterstützt nun einen nativ...