【问题标题】:Why 'timestamp not null' is resulting in default being set to 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'?为什么'timestamp not null'会导致默认设置为'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'?
【发布时间】:2016-10-23 01:24:31
【问题描述】:

当我创建一个新表时

create table test(rId int auto_increment, createtimestamp timestamp not null, PRIMARY KEY (rId));

它创建一个具有默认模式的表 createtimestampCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

未设置预期行为。但它被设置为默认值:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。为什么会这样?

我可以在创建后使用 ALTER TABLE test CHANGE COLUMN createtimestamp createtimestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ; 更改它,但不能将其更改为 ALTER TABLE test CHANGE COLUMN createtimestamp createtimestamp TIMESTAMP NOT NULL ;

看起来必须指定默认值,但这正是我不想要的。如何在创建表后且无需任何更改的情况下实现未设置默认值且架构不为空的行为?

MySql 版本:5.5.49

【问题讨论】:

  • Automatic Initialization and Updating for TIMESTAMP: "既没有 DEFAULT CURRENT_TIMESTAMP 也没有 ON UPDATE CURRENT_TIMESTAMP,这与同时指定 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 相同...要禁止第一个 TIMESTAMP 列的自动属性,请执行以下任一操作以下...”

标签: mysql sql timestamp


【解决方案1】:

最初的答案是正确的,但如果在定义中使用默认值或 NULL 是不可接受的,则可以考虑使用 datetime 代替,或者升级到允许更改行为的 MySQL 5.6 http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2017-04-26
    • 2019-12-09
    • 2016-05-30
    • 2011-09-29
    • 2012-01-01
    相关资源
    最近更新 更多