1. Wie wird die aktuelle Uhrzeit in MySQL dargestellt? Tatsächlich gibt es viele Möglichkeiten, dies auszudrücken, die wie folgt zusammengefasst werden können: AKTUELLER ZEITSTEMPEL CURRENT_TIMESTAMP() JETZT() LOKALE ZEIT LOCALTIME() LOKALER ZEITSTEMPEL LOCALTIMESTAMP() 2. Vergleich zwischen TIMESTAMP und DATETIME Ein vollständiges Datumsformat lautet wie folgt: JJJJ-MM-TT HH:MM:SS[.fraction], das in zwei Teile unterteilt werden kann: Datumsteil und Zeitteil. Der Datumsteil entspricht dem Format „JJJJ-MM-TT“ und der Zeitteil entspricht dem Format „HH:MM:SS[.fraction]“. Für das Datumsfeld wird nur der Datumsteil unterstützt. Wenn der Zeitteil eingefügt wird, wird der Inhalt dieses Teils verworfen und eine Warnung angezeigt. Wie unten dargestellt: mysql> Tabelle erstellen Test (ID Int, Einstellungsdatum); Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> in Testwerte einfügen (1, '20151208000000'); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> in Testwerte einfügen (1, '20151208104400'); Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,01 Sek.) mysql> Warnung anzeigen; FEHLER 1064 (42000): Ihre SQL-Syntax weist einen Fehler auf. Überprüfen Sie das Handbuch zu Ihrer MySQL-Serverversion auf die richtige Syntax in der Nähe von „Warnung“ in Zeile 1. mysql> wähle * aus Test; +------+------------+ | ID | Einstellungsdatum | +------+------------+ | 1 | 08.12.2015 | | 1 | 08.12.2015 | +------+------------+ 2 Zeilen im Satz (0,00 Sek.) Hinweis: Der erste löst keine Warnung aus, da sein Zeitanteil 0 ist. Ähnlichkeiten zwischen TIMESTAMP und DATETIME: 1> Beide können verwendet werden, um Datumsangaben vom Typ JJJJ-MM-TT HH:MM:SS[.fraction] darzustellen. Die Unterschiede zwischen TIMESTAMP und DATETIME sind: 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. Als nächstes überprüfen wir Erstellen Sie zunächst zwei Testtabellen, eine im Zeitstempelformat und eine im Datums-/Uhrzeitformat. mysql> Tabelle erstellen Test (ID Int, Einstellungsdatum Zeitstempel); Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> in Testwerte einfügen (1, '20151208000000'); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> Tabelle erstellen test1(id int, hiredate datetime); Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> in Test1 Werte einfügen (1, '20151208000000'); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> wähle * aus Test; +------+---------------------+ | ID | Einstellungsdatum | +------+---------------------+ | 1 | 08.12.2015 00:00:00 | +------+---------------------+ 1 Zeile im Satz (0,01 Sek.) mysql> wähle * aus test1; +------+---------------------+ | ID | Einstellungsdatum | +------+---------------------+ | 1 | 08.12.2015 00:00:00 | +------+---------------------+ 1 Zeile im Satz (0,00 Sek.) Die Ausgabe beider ist gleich. Zweitens ändern Sie die Zeitzone der aktuellen Sitzung mysql> Variablen wie „%time_zone%“ anzeigen; +------------------+--------+ | Variablenname | Wert | +------------------+--------+ | Systemzeitzone | CST | | Zeitzone | SYSTEM | +------------------+--------+ 2 Zeilen im Satz (0,00 Sek.) mysql> setze Zeitzone='+0:00'; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> wähle * aus Test; +------+---------------------+ | ID | Einstellungsdatum | +------+---------------------+ | 1 | 07.12.2015 16:00:00 | +------+---------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle * aus test1; +------+---------------------+ | ID | Einstellungsdatum | +------+---------------------+ | 1 | 08.12.2015 00:00:00 | +------+---------------------+ 1 Zeile im Satz (0,01 Sek.) Das obige "CST" bezieht sich auf die Systemzeit des Hosts, auf dem sich MySQL befindet. Dies ist die Abkürzung für China Standard Time, China Standard Time UT+8:00 Die Ergebnisse zeigen, dass die im Test zurückgegebene Zeit 8 Stunden früher ist, während die Zeit in Test1 unverändert bleibt. Dadurch wird der Unterschied zwischen den beiden vollständig bestätigt. 2> Der von den 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 von TIMESTAMP und DATETIME Schauen wir uns zunächst die folgenden Operationen an mysql> Tabelle erstellen Test (ID Int, Einstellungsdatum Zeitstempel); Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> in Test(ID) Werte(1) einfügen; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> wähle * aus Test; +------+---------------------+ | ID | Einstellungsdatum | +------+---------------------+ | 1 | 08.12.2015 14:34:46 | +------+---------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> zeigen erstellen Tabelle Test\G *************************** 1. Reihe *************************** Tabelle: Test Tabelle erstellen: CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `hiredate` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB STANDARD CHARSET=latin1 1 Zeile im Satz (0,00 Sek.) Sieht es ein bisschen seltsam aus? Ich habe das Feld „hiredate“ nicht eingefügt und sein Wert wurde automatisch auf den aktuellen Wert geändert. Außerdem habe ich beim Erstellen der Tabelle den „DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP“ nicht definiert, der im Ergebnis „show create table test\G“ angezeigt wird. Tatsächlich handelt es sich bei dieser Funktion um eine 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, wie unten gezeigt: mysql> Variablen wie „%explicit_defaults_for_timestamp%“ anzeigen; +---------------------------------+--------+ | Variablenname | Wert | +---------------------------------+--------+ | explizite_Vorgaben_für_Zeitstempel | AUS | +---------------------------------+--------+ 1 Zeile im Satz (0,00 Sek.) Werfen wir einen Blick auf die offizielle Beschreibung unten: Standardmäßig enthält die erste TIMESTAMP-Spalte sowohl DEFAULT CURRENT_TIMESTAMP als auch ON UPDATE CURRENT_TIMESTAMP, wenn keines von beiden explizit angegeben ist. Dies ist häufig nicht das, was wir möchten. Wie kann ich es deaktivieren? 1. Setzen Sie den Wert von „explicit_defaults_for_timestamp“ auf ON. 2. Der Wert von „explicit_defaults_for_timestamp“ ist immer noch OFF. Es gibt zwei Möglichkeiten, ihn zu deaktivieren. 1> Verwenden Sie die Klausel DEFAULT, um einen Standardwert für die Spalte anzugeben 2> Geben Sie das NULL-Attribut für die Spalte an. Wie unten dargestellt: mysql> Tabelle erstellen test1(id int, Einstellungsdatum, Zeitstempel null); Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> zeigen erstellen Tabelle test1\G *************************** 1. Reihe *************************** Tabelle: test1 Tabelle erstellen: CREATE TABLE `test1` ( `id` int(11) DEFAULT NULL, `hiredate` Zeitstempel NULL DEFAULT NULL ) ENGINE=InnoDB STANDARD CHARSET=latin1 1 Zeile im Satz (0,00 Sek.) mysql> Tabelle erstellen test2(id int, Einstellungsdatum, Zeitstempel, Standard 0); Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> zeigen erstellen Tabelle test2\G *************************** 1. Reihe *************************** Tabelle: test2 Tabelle erstellen: CREATE TABLE `test2` ( `id` int(11) DEFAULT NULL, `hiredate` Zeitstempel NICHT NULL STANDARD '0000-00-00 00:00:00' ) ENGINE=InnoDB STANDARD CHARSET=latin1 1 Zeile im Satz (0,00 Sek.) Vor MySQL 5.6.5 war die automatische Initialisierung und Aktualisierung nur auf TIMESTAMP anwendbar, und höchstens ein TIMESTAMP-Feld in einer Tabelle durfte diese Funktion verwenden. Ab MySQL 5.6.5 gilt die automatische Initialisierung und Aktualisierung sowohl für TIMESTAMP- als auch für DATETIME-Werte, ohne Begrenzung der Werteanzahl. siehe: 1. http://dev.mysql.com/doc/refman/5.6/en/datetime.html 2. http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Beispielcode zur Installation von Jenkins mit Docker
>>: Das WeChat-Applet implementiert einen Countdown zum Senden des SMS-Bestätigungscodes
Es gibt eine solche Anforderung: eine Importschal...
Inhaltsverzeichnis 1. Template-Tag in HTML5 2. Ei...
Hier finden Sie eine Einführung zum Ändern des Pa...
Was ist Docker-Compose Das Compose-Projekt entsta...
Im vorherigen Artikel haben wir vorgestellt, wie ...
Inhaltsverzeichnis Phänomen: Portnutzung: Rechtsc...
Vor kurzem habe ich in meinem Projekt vuethink ve...
Überblick Ich glaube, dass wir häufig auf solche ...
1. Zwei Arten der DMA-Zuordnung 1.1. Konsistente ...
1. Tabellenstruktur TABELLE person Ausweis Name 1...
Bei der Replikation werden die DDL- und DML-Opera...
Erhalten Sie tägliche Statistiken Wenn Sie ein Pr...
Vorwort In einem üblichen Geschäftsszenario müsse...
MySQL-Sequenz AUTO_INCREMENT ausführliche Erkläru...
Verwenden Sie CSS3, um coole Radar-Scan-Bilder zu...