gpt4 book ai didi

MySQL 列类型 "TIMESTAMP"隐式包含 "NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"

转载 作者:IT老高 更新时间:2023-10-28 23:46:59 24 4
gpt4 key购买 nike

我刚刚花了几个小时来追踪这个错误。给定以下 SQL:

DROP DATABASE IF EXISTS db;
CREATE DATABASE db;
CREATE TABLE db.tbl (t1 TIMESTAMP) ENGINE=INNODB;
SHOW CREATE TABLE db.tbl;

最后一行告诉我:

'CREATE TABLE `tbl` (
`t1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1'

NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP到底是从哪里来的?我没有写任何这些,而且我非常不想要任何这些,而且我有点迷失 MySQL 会做出这样的假设的话。

我是否打开/关闭了一些疯狂的晦涩配置选项?这是默认行为吗?这是一个错误?无论如何,我怎样才能让 MySQL 表现得理智?

最佳答案

在 MySQL 5.6.5 中有几个关于这个初始化的更新,你可以在这个 link 上看到(MySQL 5.6.5 之前的自动时间戳属性)。

如果您使用的是 MySQL <= 5.6.5,为了忽略此初始化,您需要将 DEFAULT 值设置为 0 或 NULL 并允许 NULL。

CREATE TABLE tbl
(
field1 TIMESTAMP DEFAULT 0,
field2 TIMESTAMP NULL DEFAULT NULL
)

如果您使用 MySQL >= 5.6.6,则有一个名为 explicit_defaults_for_timestamp 的参数默认情况下禁用。您可以启用此设置或将 DEFAULT 值设置为 0 或 NULL,与以前的 MySQL 版本相同。

如果您使用的是 MySQL >= 8.0.2,那么 explicit_defaults_for_timestamp默认情况下启用。这会禁用非标准行为(谢天谢地)。此外,当您禁用此设置时,MySQL 会生成警告。因此,例如,如果您没有为 TIMESTAMP 列定义 DEFAULT 值,它会自动设置为 NULL

关于MySQL 列类型 "TIMESTAMP"隐式包含 "NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22860351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com