如何使用MySQL存储UNIX时间戳

Jet*_*rst 12 php mysql unix datetime date

一些背景:

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

我正在使用Carbon来处理客户端上服务器端和moment.js的时区转换和计算.

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

问题

我对"时间戳"的定义感到有点困惑.在PHPMyAdmin中,时间戳不是unix时间戳,而是日期格式:

2016-10-06 20:50:46
Run Code Online (Sandbox Code Playgroud)

因此,如果您想拥有当前时间戳的默认字段,那么您将获得GMT中的当前日期.

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

题:

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

Bar*_*mar 15

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

不幸的是,我认为没有办法指定插入当前时间戳的默认值.UNIX_TIMESTAMP()插入时需要显式调用,并使用它.DEFAULT规范中不允许函数调用.

  • 它不是 11 个字节,而是 11 个十进制数字,也就是 32 位数字可以显示的数字。 (3认同)
  • INT(11) 不会解决这个问题,只是尝试了一下,将 2147483647 存储为 1623925731158。BIGINT 解决了这个问题。 (3认同)