Значения по умолчанию MySQL 5.5 и 5.6
Мне нужно уточнить поведение значений по умолчанию в MySQL 5.5 и 5.6. Допустим, у нас есть следующая таблица на сервере MySQL 5.5:
CREATE TABLE `test` (
`TestColumn` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=utf8;
Я могу выполнить следующий запрос без проблем:
INSERT INTO `test` VALUES (NULL);
Что создает следующую строку:
TestColumn
2014-02-20 14:55:05
Теперь, если я повторяю тот же тест на сервере MySQL 5.6, вставка не выполняется:
Error Code: 1048
Column 'TestColumn' cannot be null
Я понимаю, что автоматическая инициализация временной метки изменилась в 5.6 (http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html), но то, что я не могу сработать, заключается в том, как реплицировать поведение, наблюдаемое в 5.5 в 5.6.
Не уверен, что это важно, но наш сервер 5.6 имеет значение explicit_defaults_for_timestamp, установленное в положение ON.
В идеале, для меня это решение, но если кто-то лучше понимает и может объяснить, что это было бы полезно.
Спасибо.
EDIT: мы используем MySQL 5.6.13
Ответы
Ответ 1
Поведение, показанное выше в 5.5, было на самом деле ошибкой. Это было зафиксировано в 5.6.11. Ознакомьтесь с примечаниями к выпуску для 5.6.11 в самом низу. Это было частью ошибок 68472 и 16394472 (на которые я не могу найти ссылку).
Если вы отключите флаг explicit_defaults_for_timestamp
, он ДОЛЖЕН работать так же, как в 5.5
Это была та же самая проблема, что и в нашей БД при обновлении с 5.5 до 5.6.
Ответ 2
Вы пробовали исключить столбец?
INSERT INTO `test` () VALUES ();