Значения по умолчанию 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 ();