Ich möchte einige Erläuterungen zum Verhalten von Standardwerten in MySQL 5.5 & 5.6. Lassen Sie uns sagen wir die folgende Tabelle auf einem MySQL 5.5-Server haben:MySQL 5.5 & 5.6 Standardwerte
CREATE TABLE `test` (
`TestColumn` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=utf8;
Ich bin in der Lage führen Sie die folgende Abfrage, ohne Frage:
INSERT INTO `test` VALUES (NULL);
, welche die folgende Zeile erstellt:
TestColumn
2014-02-20 14:55:05
Jetzt, wenn ich den gleichen Test auf einem MySQL 5.6 Server wiederhole, schlägt die Einfügung fehl:
Error Code: 1048
Column 'TestColumn' cannot be null
Ich verstehe, dass Timestamp automatische Initialisierung in 5.6 (http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html) geändert hat, aber was ich nicht herausfinden kann, ist, wie das Verhalten in 5.5 in 5.5 zu replizieren.
Nicht sicher, ob es wichtig ist, aber unser 5.6 Server hat explicit_defaults_for_timestamp auf ON gesetzt.
Idealerweise ist eine Lösung dafür, aber wenn jemand ein besseres Verständnis hat und es erklären kann, wäre das auch nützlich.
Danke.
EDIT: Wir verwenden MySQL 5.6.13
der erste Einsatz sollte in erster Linie nicht funktioniert haben. Sie haben * gebeten *, dass die Datenbank einen NULL-Wert in die Nicht-Null-Spalte schreibt, also lehnt 5.6 das ab. –
Dies funktioniert am 5.6 – bear
@a_horse_with_no_name die Definition ist, dass die Spalte nicht null sein kann - wenn jedoch ein Standard angegeben ist, wird es den Standard verwenden. Bearbeiten, scratchen, dass – bear