Heim >Datenbank >MySQL-Tutorial >Beispiel für die gemeinsame Nutzung von Problemen, die durch den Zeitstempel von MySQL 8.0 verursacht werden
Dieser Artikel bringt Ihnen einige verwandte Probleme, die bezüglich des Standardwerts von Feldern in MySQL auftreten können. Ich hoffe, er wird Ihnen helfen.
Heute hat das Unternehmen ein Problem gemeldet. Das Feld „modify_time“ darf nicht null sein und das Feld „Geschäftsfeedback“ ist auf einen Standardwert gesetzt:
Von die Fehlermeldung: Möglicherweise ist für das Feld „modify_time“ kein Standardwert festgelegt oder der Standardwert ist falsch. Überprüfen Sie als Nächstes die Tabellenstruktur:
CREATE TABLE `jj_xxxx` ( .... `create_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00' , `update_user` int DEFAULT NULL, `modify_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00', .... PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4893 DEFAULT CHARSET=utf8 COMMENT='xxxxx'
Von der Tabellenstruktur her scheint es kein Problem mit dem Standardwert zu geben Wert festgelegt. Überprüfen Sie die Einstellung des Parameters sql_mode. Es scheint, dass kein Problem gefunden wurde.
Geschäftsmitarbeiter haben berichtet, dass die Online-Tabelle auch so ist, aber es ist online normal, und jetzt müssen wir dieses Geschäft auf ein anderes migrieren Umgebungen. Vom Unternehmen zur Datenbank gibt es eine weitere Gruppe von Umgebungen.
Plötzlich habe ich den Unterschied in der Datenbankversion berücksichtigt. Die neue Umgebung ist MySQL Version 8.0 und die Online-Umgebung ist Version 5.7 Der Parameter „explicit_defaults_for_timestamp“ ist in den beiden Versionen unterschiedlich.
Grund:
explicit_defaults_for_timestamp Systemvariable Bestimmt, wie der MySQL-Server Standardwerte und NULL-Werte in der Zeitstempelspalte verarbeitet.
Diese Variable wurde ab MySQL-Version 5.6.6 eingeführt. Sie ist in globale Ebene und Sitzungsebene unterteilt. Der Standardwert ist AUS.
In 8.0 wurde der Standardwert auf on
explicit_defaults_for_timestamp=OFF geändert, was bedeutet, dass das Standardformat des Zeitstempels verwendet wird; was ist das Standardformat des Zeitstempeltyps?1. Im Gegensatz zu anderen Feldtypen ist dieses Feld standardmäßig nicht auf Null gesetzt.
2 Das Zeitstempelfeld in der ersten Spalte ist nicht erzwungen angegeben, wird standardmäßig DEFAULT CURRENT_TIMESTAMP und ON UPDATE CURRENT_TIMESTAMP verwendet.
3. Wenn das Zeitstempelfeld in der nicht ersten Spalte nicht gezwungen ist, einen Standardwert anzugeben, wird standardmäßig „0000-00-00 00:00:00“ eingegeben.
4 es auf den Standardwert;
explicit_defaults_for_timestamp=ON, dann schalten Sie die Funktionen des Zeitstempels aus:1. Wenn nicht explizit null angegeben ist, ist der Standardwert ebenfalls null null anstelle von CURRENT_TIMESTAMP;
3. Wenn das Attribut not null angegeben ist und der Wert dieses Felds nicht in der Einfügemethode angegeben ist, wird im strikten sql_mode ein Fehler gemeldet. Fügen Sie „0000-00-00 00:00:00“ im nicht-strikten SQL-Modus ein.
Sie müssen die folgenden Szenarien sorgfältig berücksichtigen:1. Der Zeitstempel ist nicht null, der Standardwert CURRENT_TIMESTAMP. Dies geschieht, wenn sich „explicit_defaults_for_timestamp“ von 0 ändert zu 1 Was sind die geschäftlichen Auswirkungen? Wenn das Zeitstempelfeld einen Standardwert hat, schlägt eine solche Konvertierung fehl, was sich auf das Geschäft auswirkt wird auch verursachen Welche Auswirkungen hat das auf das Geschäft?
Durch die Durchführung einer solchen Feldkonvertierung werden alle ursprünglichen Nullwerte des Felds in CURRENT_TIMESTAMP konvertiert. Wenn viele historische Daten vorhanden sind, ist eine solche Konvertierung sehr ressourcenintensiv. Gleichzeitig müssen auch die Auswirkungen von Wertänderungen auf das Unternehmen berücksichtigt werden.
Empfohlenes Lernen:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonBeispiel für die gemeinsame Nutzung von Problemen, die durch den Zeitstempel von MySQL 8.0 verursacht werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!