Heim  >  Artikel  >  Datenbank  >  Über den Zeitstempel des MySQL-Feldtyps ist der Standardwert die aktuelle Zeit

Über den Zeitstempel des MySQL-Feldtyps ist der Standardwert die aktuelle Zeit

高洛峰
高洛峰Original
2016-11-05 17:00:041211Durchsuche

Heute habe ich die Anwendung bei AWS bereitgestellt und festgestellt, dass das Programm einen Fehler gemeldet hat, nachdem der Inhalt der Hintergrundänderung übermittelt wurde. Bei der Untersuchung wurde festgestellt, dass sich beim Aktualisieren von Daten der Standardwert eines Zeitstempeltypfelds in einer Datentabelle geändert hat in das Format „0000-00-00. 00:00:00.000000“, was zu einem Analysefehler führt.

Die Erstellungsanweisung dieses Felds in MySQL lautet wie folgt

`XXX`-Zeitstempel NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Normalerweise sollte es die Zeit sein, wann Das aktuelle Datenformat ändert sich

Da es in der lokalen Entwicklungsumgebung getestet wurde, gibt es kein solches Problem und die Anwendungsumgebung bleibt dieselbe. Der einzige Unterschied besteht darin, dass die Datenbank der Produktionsumgebung MySQL verwendet von AWS RDS. Nach der Suche nach den Fehlerinformationen sollte es wahrscheinlich ein Problem mit der MySQL-Parameterkonfiguration sein.

Lesen Sie die offizielle MySQL-Dokumentation

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.

Oft ist das nicht das, was wir wollen.

1. Setzen Sie den Wert von „explicit_defaults_for_timestamp“ auf ON.

2. Der Wert von „explicit_defaults_for_timestamp“ ist immer noch AUS und es gibt zwei Möglichkeiten, ihn zu deaktivieren

1> Verwenden Sie die DEFAULT-Klausel, um einen Standardwert für die Spalte anzugeben

2> Geben Sie das NULL-Attribut für die Spalte an.

mysql> show variables like '%explicit_defaults_for_timestamp%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF   |
+---------------------------------+-------+
row in set (0.00 sec)

Der Wert von „explicit_defaults_for_timestamp“ in der Entwicklungsumgebung ist OFF


Nach dem Vergleich der Parameter von MySQL in RDS habe ich festgestellt, dass der Parameterwert 0 ist, da es sich um die Standardparametergruppe handelt von mysql in rds Änderungen sind nicht zulässig. Wenn Sie also eine Parametergruppe erstellen, wird die Standardparametergruppe standardmäßig geerbt. Damals wusste ich nicht, wie 0 und 1 hier Ein und Aus entsprechen, also habe ich es geändert Stellen Sie den Wert auf 1. Starten Sie dann rds neu.

Zu diesem Zeitpunkt tritt der Fehler nicht mehr auf.

Ändern Sie die Parameter von MySQL in RDS in die folgende Situation, perfekte Lösung

explicit_defaults_for_timestamp = 1


Stellungnahme:
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