在调试我的PHP代码数小时之后,由于日期存储不正确,我意识到XAMPP
会自动向我的{{1添加一个DEFAULT
属性和一个ON UPDATE
属性}}列。
我有这张桌子:
date_added
如您所见,我显然没有在表创建代码上设置CREATE TABLE test_table(
date_added timestamp
NOT NULL,
last_updated timestamp
NOT NULL
);
值或DEFAULT
标签。但是,如果我进入phpmyadmin并查看此表的结构,则它看起来像这样:
我尝试单击“更改”,并将ON UPDATE
设置为DEFAULT
,将None
设置为空白,但它没有更改。关于如何删除这些东西有什么建议吗?
答案 0 :(得分:1)
这是因为设置了系统变量explicit_defaults_for_timestamp
,在MySQL <8.0.2中默认设置为OFF
。如果是OFF
,
如果禁用了explicit_defaults_for_timestamp,则服务器将启用 非标准行为并按如下方式处理TIMESTAMP列:
未使用NULL属性明确声明的
TIMESTAMP列将使用NOT NULL属性自动声明。分配这样的 允许值为NULL的列,并将该列设置为 当前时间戳。
- 如果未使用NULL属性或显式DEFAULT属性明确声明,则第一列之后的
表中的第一个TIMESTAMP列,如果未使用NULL属性或显式的DEFAULT或ON UPDATE属性显式声明, 自动使用DEFAULT CURRENT_TIMESTAMP声明并打开 UPDATE CURRENT_TIMESTAMP属性。
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讨论了如何更改设置。