如何用mysql存储unix时间戳

hfsqlsce  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(368)

一些背景:
我的网站很大程度上依赖于协调不同时区的用户。
我在服务器端使用carbon处理时区转换和计算,在客户端使用moment.js。
因此,设计选择将所有日期时间(例如事件的开始时间)存储为unix时间戳。
问题
我对“时间戳”的定义有点困惑。在phpmyadmin中,时间戳不是unix时间戳,而是日期格式:

2016-10-06 20:50:46

因此,如果您想拥有当前时间戳的默认字段,那么您将获得当前日期(以gmt为单位)。
与unix时间戳整数相比,这使得转换回用户时区变得更复杂。。。
问题:
我当前使用的unix时间戳应该存储为哪种字段类型 int(11) 默认为 none . 顺理成章。。。有没有办法在mysql中默认存储当前unix时间戳(例如1475971200)?

j8ag8udp

j8ag8udp1#

实际上,你必须使用 bigint 或者 varchar 因为 int(11) 是2'147'483'647(更多信息在这里)。
然后,正如前面的答案所说,您必须手动插入 UNIX_TIMESTAMP()

dphi5xsq

dphi5xsq2#

可以继续使用无符号int,但必须在insert时手动设置时间戳( UNIX_TIMESTAMP() ).
或者,您可以将时间戳类型与默认的当前时间戳(在后台存储为int)一起使用,并在选择时将其转换为int: SELECT UNIX_TIMESTAMP(foo_field) FROM foo_table 引用-是否可以在mysql中创建一个带有unix\u时间戳默认值的列?

lsmepo6l

lsmepo6l3#

unix时间戳是一个大整数(自1970-01-01 00:00:00 utc以来的秒数),因此 INT(11) 是正确的数据类型。
不幸的是,我不认为有任何方法可以指定一个默认值来插入当前的时间戳。你需要打电话 UNIX_TIMESTAMP() 显式地插入,并使用它。中不允许函数调用 DEFAULT 规范。

相关问题