gpt4 book ai didi

mysql - 是否可以定义一个不为空且没有默认值且在更新时没有特殊行为的时间戳列?

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

当我创建一个带有时间戳列的表时,该列在更新 CURRENT_TIMESTAMP 时神奇地定义为 NOT NULL DEFAULT CURRENT_TIMESTAMP。忽略到目前为止这有多奇怪,我想将其更改为没有默认值并且没有特殊的“更新”行为。

我发现如果我将列更改为 NULL,默认值会神奇地设置为 NULL,“on update”会神奇地消失。这很好,但是我希望该列不为空。当我改回来时,默认值和“更新时”(设置为 CURRENT_TIMESTAMP)都会神奇地重新出现。

我知道我可以使用 datetime 代替时间戳,但我对时间戳很感兴趣,因为它是时区感知的(似乎就像 Postgres 中的“带时区的时间戳”)。

最佳答案

时间戳列是一种特殊情况。见 here : 默认情况下,TIMESTAMP 列不是 NULL,不能包含 NULL 值,分配 NULL 会分配当前时间戳。

更多详细信息请阅读 Data Type Default Values .

具体来说,这种情况适用于不以严格模式运行时。如果在严格模式下运行,插入 NULL 会引发错误。

这应该照顾它:

ALTER TABLE tableName ALTER COLUMN columnName DROP DEFAULT;

如果这不起作用,这样做应该会给您留下默认值(很容易被覆盖),但删除 ON UPDATE:

ALTER TABLE tableName CHANGE columnName columnName NOT NULL DEFAULT CURRENT_TIMESTAMP;

注意重复的列名。

关于mysql - 是否可以定义一个不为空且没有默认值且在更新时没有特殊行为的时间戳列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9748954/

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