Heim > Datenbank > MySQL-Tutorial > Hauptteil

Beispiel für die gemeinsame Nutzung von Problemen, die durch den Zeitstempel von MySQL 8.0 verursacht werden

Freigeben: 2022-01-17 15:44:33
nach vorne
2447 Leute haben es durchsucht

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.

Beispiel für die gemeinsame Nutzung von Problemen, die durch den Zeitstempel von MySQL 8.0 verursacht werden

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:

Beispiel für die gemeinsame Nutzung von Problemen, die durch den Zeitstempel von MySQL 8.0 verursacht werden

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'
Nach dem Login kopieren

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-Tutorial

Das 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!

Verwandte Etiketten:
Quelle:Mysql技术公众号
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!