如何在默认和更新时将 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?的主要内容,如果未能解决你的问题,请参考以下文章
mongoose schema 设置更新时间戳为unix时间
mongoose schema 设置更新时间戳为unix时间
mongoose schema 设置更新时间戳为unix时间