MySQL 5.5& 5.6默认值

时间:2014-02-20 15:02:04

标签: mysql default-value

我想澄清一下MySQL 5.5和MySQL中默认值的行为。 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。

理想情况下,我所追求的是解决方案,但如果有人能够更好地理解并且可以解释它也会有用。

感谢。

编辑:我们正在使用MySQL 5.6.13

2 个答案:

答案 0 :(得分:12)

您在5.5中显示的行为实际上是一个错误。这在5.6.11中得到修复。查看最底部的release notes for 5.6.11。它是错误68472和16394472(我实际上无法找到链接)的一部分。

如果关闭explicit_defaults_for_timestamp标志,它应该像在5.5中一样工作

当我们从5.5更新到5.6时,这与我的数据库完全相同。

答案 1 :(得分:0)

您是否尝试省略该列?

INSERT INTO `test` () VALUES ();