Der MySQL-Spaltentyp "TIMESTAMP" enthält implizit "NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"

Hab ich verbrachte ein paar Stunden aufspüren dieser Fehler. Die folgende SQL:

DROP DATABASE IF EXISTS db;
CREATE DATABASE db;
CREATE TABLE db.tbl (t1 TIMESTAMP) ENGINE=INNODB;
SHOW CREATE TABLE db.tbl;

Die Letzte Zeile zeigt mir:

'CREATE TABLE `tbl` (
  `t1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1'

Wo auf der Erde hat die NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP kommen? Ich wollte nicht schreiben, und ich sehr viel nicht wollen, und ich bin irgendwie verloren für Wörter hat MySQL eine solche Vermutung.

Habe ich einige wahnsinnig obskuren Konfiguration option ein - /ausgeschaltet? Ist das Standard-Verhalten? Ist es ein bug? In jedem Fall, wie bekomme ich MySQL-Verhalten sanely?

Kommentar zu dem Problem
Wahrscheinlich möchten Sie datetime statt timestamp. Ein timestamp ist für die Versionierung von Datensätzen und die Vorgabe ist eine Aktualisierung dieser Spalte, wenn der Datensatz aktualisiert wird. Kommentarautor: juergen d
@juergend Dank. Der MySQL-Dokumentation macht es nicht bei allen klar, daß das, was die TIMESTAMP - Typ vorgesehen ist. Wer schrieb, dass die Dokumentation sollte draußen gebracht und erschossen. Kommentarautor: jameshfisher
Ich nehme an, Sie sind sich dessen bewusst, aber docs sagen «Der TIMESTAMP-Datentyp bietet die automatische Initialisierung und die Aktualisierung auf das aktuelle Datum und Zeit» und links zu Automatische Initialisierung und Aktualisierung der für TIMESTAMP. Schriftsteller verdient nicht mehr als einen kurzen Satz. Kommentarautor: Álvaro González
@ÁlvaroG.Vicario ich stolperte über dieses Verhalten, und ich lese die docs, aber ich habe nicht erwartet, dass ein bieten aufgezwungen mich 😉 Kommentarautor: Olaf Dietsche

InformationsquelleAutor der Frage jameshfisher | 2014-04-04

Schreibe einen Kommentar