创建表时如何禁用DEFAULT和ON UPDATE

时间:2019-03-22 08:15:51

标签: mysql sql mysqli phpmyadmin xampp

在调试我的PHP代码数小时之后,由于日期存储不正确,我意识到XAMPP会自动向我的{{1添加一个DEFAULT属性和一个ON UPDATE属性}}列。

我有这张桌子:

date_added

如您所见,我显然没有在表创建代码上设置CREATE TABLE test_table( date_added timestamp NOT NULL, last_updated timestamp NOT NULL ); 值或DEFAULT标签。但是,如果我进入phpmyadmin并查看此表的结构,则它看起来像这样:Structure of table

我尝试单击“更改”,并将ON UPDATE设置为DEFAULT,将None设置为空白,但它没有更改。关于如何删除这些东西有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这是因为设置了系统变量explicit_defaults_for_timestamp,在MySQL <8.0.2中默认设置为OFF。如果是OFF

  

如果禁用了explicit_defaults_for_timestamp,则服务器将启用   非标准行为并按如下方式处理TIMESTAMP列:

     
      未使用NULL属性明确声明的
  • TIMESTAMP列将使用NOT NULL属性自动声明。分配这样的   允许值为NULL的列,并将该列设置为   当前时间戳。

  •   
  • 表中的第一个TIMESTAMP列,如果未使用NULL属性或显式的DEFAULT或ON UPDATE属性显式声明,   自动使用DEFAULT CURRENT_TIMESTAMP声明并打开   UPDATE CURRENT_TIMESTAMP属性。

  •   如果未使用NULL属性或显式DEFAULT属性明确声明,则第一列之后的
  • TIMESTAMP列为   自动声明为DEFAULT'0000-00-00 00:00:00'(“零”   时间戳记)。对于没有为此指定显式值的插入行   列,则该列分配为“ 0000-00-00 00:00:00”,并且没有警告   发生。

         

    取决于是否启用严格SQL模式或NO_ZERO_DATE SQL模式,默认值'0000-00-00 00:00:00'可能无效。   请注意,传统SQL模式包括严格模式和   NO_ZERO_DATE。请参见第5.1.11节“服务器SQL模式”。

  •   

请参见manual

This question讨论了如何更改设置。