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

So verhindern Sie das Flashen von Vue in kleinen Projekten

Zusammenfassung HTML: Element plus V-Umhang CSS: ...

Konfigurationsmethode für die SystemC-Umgebung unter Linux

Das Folgende ist die Konfigurationsmethode unter ...

Detaillierte Erklärung von react setState

Inhaltsverzeichnis Ist setState synchron oder asy...

Beispiel für eine HTTPS-Konfigurationsmethode für den Nginx-Server

Linux: Linux-Version 3.10.0-123.9.3.el7.x86_64 Ng...

Beispieltest MySQL-Enumerationstyp

Bei der Entwicklung eines Projekts stößt man häuf...

Erste Schritte mit SELinux

Bereits zu Kernel 2.6-Zeiten wurde ein neues Sich...

Detaillierte Beschreibung des HTML-Meta-Viewport-Attributs

Was ist ein Ansichtsfenster? Mobile Browser platzi...

Ein tiefes Verständnis der spitzen Klammern in Bash (für Anfänger)

Vorwort Bash verfügt über viele wichtige integrie...

React+Typescript implementiert die Countdown-Hook-Methode

Zunächst wird setInterval als Hook gekapselt 👇 im...

Beispielcode für die benutzerdefinierte Scroll-Ansicht des WeChat-Applets

Miniprogramm Benutzerdefinierte Scroll-View-Bildl...