如何使用 MySQL 存储 UNIX 时间戳

2022-08-30 17:15:31

一些背景:

我的网站在很大程度上依赖于协调各种不同时区的用户。

我正在使用Carbon在服务器端处理我的时区转换和计算,并在客户端.js时刻处理。

因此,设计选择所有日期时间(例如事件的开始时间)将存储为unix时间戳。

问题

我对“时间戳”的定义有点困惑。在PHPMyAdmin中,时间戳不是unix时间戳,而是日期格式:

2016-10-06 20:50:46

因此,如果您想拥有当前时间戳的默认字段,则可以在GMT中获得当前日期。

与unix时间戳整数相比,这使得转换回用户时区变得更加复杂...

问题:

我应该将Unix时间戳存储为什么字段类型,目前我正在使用默认值。通过扩展...有没有办法在MySQL中默认存储当前的unix时间戳(例如1475971200)?int(11)none


答案 1

Unix 时间戳是一个大整数(自 1970-01-01 00:00:00 UTC 以来的秒数),因此是正确的数据类型。INT(11)

不幸的是,我认为没有任何方法可以指定将插入当前时间戳的默认值。您需要在插入时显式调用,并使用它。规范中不允许使用函数调用。UNIX_TIMESTAMP()DEFAULT


答案 2

您可以继续使用未签名的 INT,但必须手动设置插入 () 上的时间戳。UNIX_TIMESTAMP()

或者,您可以将 TIMESTAMP 类型与默认CURRENT_TIMESTAMP(在后台存储为整型)结合使用,并在选择以下选项时将其转换为整型:
SELECT UNIX_TIMESTAMP(foo_field) FROM foo_table

参考 - 是否可以在MySQL中创建具有UNIX_TIMESTAMP默认值的列?


推荐