Я хотел бы получить разъяснения о поведении значений по умолчанию в MySQL 5.5 & 5.6. Допустим, мы имеем следующую таблицу на MySQL 5.5 сервера:MySQL 5.5 и 5.6 значения по умолчанию
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
первая вставка не должна была работать в первую очередь. Вы * запросили * базу данных, чтобы поместить значение NULL в столбец не-нуль, так что 5.6 правильно отклоняет это. –
Это работает с 5.6 – bear
@a_horse_with_no_name. Определение состоит в том, что столбец не может быть нулевым, однако если задан по умолчанию, он будет использовать значение по умолчанию. Изменить, поцарапать, что – bear