【发布时间】:2014-03-21 14:49:09
【问题描述】:
我想澄清一下 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.6 中复制 5.5 中看到的行为。
不确定是否重要,但我们的 5.6 服务器已将 explicit_defaults_for_timestamp 设置为 ON。
理想情况下,我所追求的是对此的解决方案,但如果有人有更好的理解并可以解释它,那也会很有用。
谢谢。
编辑:我们使用的是 MySQL 5.6.13
【问题讨论】:
-
第一个插入一开始就不应该起作用。您在要求数据库将 NULL 值放入非空列中,因此 5.6 拒绝这样做是正确的。
-
@a_horse_with_no_name 定义是该列不能为空 - 但是,如果提供了默认值,它将使用默认值。编辑,从头开始
-
@Shamil 您使用的是什么版本的 MySQL? 5.6.5 中的行为发生了变化(我们使用的是 5.6.13,我应该在原帖中这么说)
-
@Shamil:没有提供默认值,插入指定了明确的
NULL值。使用默认值仅适用于完全未指定列或使用关键字DEFAULT。 -
请阅读此链接:dev.mysql.com/doc/refman/5.6/en/… 它可能会有所帮助。这是
explicit_defaults_for_timestamp系统变量的描述,是5.6加入的
标签: mysql default-value