某些背景:
我的网站在很大程度上依赖于协调各个不同时区的用户。
我正在使用Carbon来处理客户端上服务器端和moment.js的时区转换和计算。
因此,设计选择是将所有日期时间(例如事件的开始时间)存储为unix时间戳。
问题
我对#34; timestamp"的定义感到有点困惑。在PHPMyAdmin中,时间戳不是unix时间戳,而是日期格式:
2016-10-06 20:50:46
因此,如果您想拥有当前时间戳的默认字段,那么您将获得GMT中的当前日期。
与unix时间戳整数相比,这使得转换回用户时区变得更加复杂......
问题:
我应该将我的unix时间戳存储为哪种字段类型,目前我使用int(11)
,默认值为none
。通过扩展...有没有办法在MySQL中默认存储当前的unix时间戳(例如1475971200)?
答案 0 :(得分:14)
Unix时间戳是一个大整数(自1970-01-01 00:00:00 UTC以来的秒数),因此INT(11)
是正确的数据类型。
不幸的是,我认为没有办法指定插入当前时间戳的默认值。插入时需要明确调用UNIX_TIMESTAMP()
,并使用它。 DEFAULT
规范中不允许进行函数调用。
答案 1 :(得分:2)
您可以继续使用无符号INT,但您必须在插入时手动设置时间戳(UNIX_TIMESTAMP()
)。
或者您可以将TIMESTAMP类型与默认的CURRENT_TIMESTAMP(在幕后存储为int)一起使用,并在选择时将其转换为int:
SELECT UNIX_TIMESTAMP(foo_field) FROM foo_table
参考 - Is it possible to create a column with a UNIX_TIMESTAMP default in MySQL?
答案 2 :(得分:0)
实际上,您必须使用bigint
或varchar
,因为int(11)
的最大值为2'147'483'647(更多信息here)。
然后,如前面的答案所说,您必须手动插入UNIX_TIMESTAMP()
答案 3 :(得分:0)
对于最大位数为4294967295,当前时间戳为1553244188的10位数字,int(10)可以。在整数字段中,我对查询使用默认的默认整数0(未设置)。