MySQL TIMESTAMP 默认为 NULL,而不是 CURRENT_TIMESTAMP

问题描述 投票:0回答:4

使用 MySQL,我尝试从日期列和时间列创建时间戳列。如果日期或时间列包含 NULL 值,MySQL 会自动将

TIMESTAMP
列中的相应值设置为
CURRENT_TIMESTAMP

有没有办法让它默认为

NULL
,而不是
CURRENT_TIMESTAMP

类似:

ALTER TABLE customers ADD s_timestamp TIMESTAMP;
UPDATE customers
    SET s_timestamp = timestamp(s_date,s_time) DEFAULT NULL;
mysql sql timestamp
4个回答
97
投票

使用此查询添加您的列

ALTER TABLE `customers` 
ADD COLUMN `s_timestamp` TIMESTAMP NULL DEFAULT NULL;

并且,如果您只想在更新时获取当前时间戳:

ALTER TABLE `customers` 
ADD COLUMN `s_timestamp` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP;

0
投票

添加到接受的答案,以防有人想要修改默认创建为 current_timestamp 的现有列:

alter table `customers` modify `s_timestamp` timestamp null

该列现在不再默认为 current_timestamp。


0
投票

虽然这似乎已经得到解答,但我们有

createdAt
updatedAt
TIMESTAMP(6)
列。

  `createdAt` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `updatedAt` timestamp(6) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(6),

在我们的应用程序代码中,我们从不设置这些值(除非修复某些内容并希望保留任何原始

updatedAt
或克隆/导入数据并且这些值是已知的)。

如果您在构建时间戳时的日期/时间为空,那么首先测试它们是一个可行的选择。

未经测试

UPDATE table SET column = CASE
  WHEN s_date IS NULL OR s_time IS NULL THEN null
  ELSE TIMESTAMP(s_date, s_time)
  END

根据记忆,如果查询中未提及该列,则会发生默认行为。


-1
投票

我认为这应该可行:

ALTER TABLE customers ADD COLUMN s_timestamp TIMESTAMP DEFAULT NULL;
© www.soinside.com 2019 - 2024. All rights reserved.