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: jameshfisherIch 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 Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
In MySQL 5.6.5 es gibt mehrere updates bezüglich dieser Initialisierung können Sie sehen auf dieser link (Automatische Timestamp-Eigenschaften Vor MySQL 5.6.5).
Wenn Sie mit MySQL <= 5.6.5, um zu ignorieren diese Initialisierung müssen Sie den DEFAULT-Wert auf " 0 "oder" NULL " mit NULL erlaubt.
Wenn Sie mit MySQL >= 5.6.6, es gibt parameter aufgerufen explicit_defaults_for_timestamp die standardmäßig deaktiviert ist. Sie können diese Einstellung aktivieren oder setzen Sie den DEFAULT-Wert auf 0 oder NULL ist, denselben Ansatz für frühere MySQL-Versionen.
InformationsquelleAutor der Antwort Erico
Thos sind Standardwerte, die verwendet werden, auch wenn nicht ausdrücklich in der CREATE-Anweisung. Wenn Sie möchten, um beides zu vermeiden, verwenden Sie
t1 TIMESTAMP DEFAULT 0
oderts1 TIMESTAMP NULL DEFAULT NULL
Update
Vor MySQL 5.6.5 man könnte nur
TIMESTAMP
im Falle Sie haben wollte-Spalte wird automatisch aktualisiert, wenn die Zeile geändert wird. Leider wurde diese Funktionalität beschränkt sich auf InnoDB und nicht auf InnoDB-Tabellen.MySQL 5.6.5 können das mit
DATETIME
als gut. Finden Sie andere Beiträge auf dieser Website für weitere detailsInformationsquelleAutor der Antwort vhu