如何在默认和更新时将 unix 时间戳存储为 int?

Posted

技术标签:

【中文标题】如何在默认和更新时将 unix 时间戳存储为 int?【英文标题】:How to store unix timestamp as int with default and on update? 【发布时间】:2021-12-29 17:06:44 【问题描述】:

我一直在用以下内容更新我的 mysql 表:

ALTER TABLE logs ADD COLUMN updateTimeStamp timestamp DEFAULT current_timestamp() ON UPDATE current_timestamp;

这以

的格式存储时间戳
2021-12-29 15:21:34

我最初尝试这样做:

ALTER TABLE logs ADD COLUMN updateTimeStamp timestamp DEFAULT unix_timestamp() ON UPDATE unix_timestamp();

这样可以像 12121232 这样存储,但是会导致错误。

无论如何我可以实现默认值和更新并以 1212112 格式存储时间戳,而不是人类可读的日期时间?

我知道我可以做到SELECT unix_timestamt(columnname),但理想情况下我不想这样做。

【问题讨论】:

根据文档,MySQL 存储了一个TIMESTAMP: A four-byte integer representing seconds UTC since the epoch ('1970-01-01 00:00:00' UTC)。当你查询它时,它会给你一个人类可读的时间戳。如果你想在 MySQL 不知道它是时间戳的情况下存储一个整数,那么你可以这样做,但是你会失去它提供的时间戳的任何功能。 select version(); 显示什么? 【参考方案1】:

如果要在选择列时自动获取整数,则需要将其设为int(或int unsigned)类型。您可以使用default (unix_timestamp()) 设置其默认值(如果不使用历史上允许的默认值之一,则需要额外的括号)。并且您需要添加一个触发器以将其设置为更新。

但我建议你不要那样做;只需使用时间戳类型。不使用旨在存储时间戳的类型,只会给自己带来麻烦。

【讨论】:

感谢您的解释。我正在按照你的建议做,并保持时间戳不变

以上是关于如何在默认和更新时将 unix 时间戳存储为 int?的主要内容,如果未能解决你的问题,请参考以下文章

将日期时间列值批量转换和更新为 UNIX 时间戳?

mongoose schema 设置更新时间戳为unix时间

mongoose schema 设置更新时间戳为unix时间

mongoose schema 设置更新时间戳为unix时间

mongoose schema 设置更新时间戳为unix时间

如何将 SQL Server SMALLDATETIME 转换为 Unix 时间戳?