一些背景:
我的网站很大程度上依赖于协调不同时区的用户。
我在服务器端使用carbon处理时区转换和计算,在客户端使用moment.js。
因此,设计选择将所有日期时间(例如事件的开始时间)存储为unix时间戳。
问题
我对“时间戳”的定义有点困惑。在phpmyadmin中,时间戳不是unix时间戳,而是日期格式:
2016-10-06 20:50:46
因此,如果您想拥有当前时间戳的默认字段,那么您将获得当前日期(以gmt为单位)。
与unix时间戳整数相比,这使得转换回用户时区变得更复杂。。。
问题:
我当前使用的unix时间戳应该存储为哪种字段类型 int(11)
默认为 none
. 顺理成章。。。有没有办法在mysql中默认存储当前unix时间戳(例如1475971200)?
3条答案
按热度按时间j8ag8udp1#
实际上,你必须使用
bigint
或者varchar
因为int(11)
是2'147'483'647(更多信息在这里)。然后,正如前面的答案所说,您必须手动插入
UNIX_TIMESTAMP()
dphi5xsq2#
可以继续使用无符号int,但必须在insert时手动设置时间戳(
UNIX_TIMESTAMP()
).或者,您可以将时间戳类型与默认的当前时间戳(在后台存储为int)一起使用,并在选择时将其转换为int:
SELECT UNIX_TIMESTAMP(foo_field) FROM foo_table
引用-是否可以在mysql中创建一个带有unix\u时间戳默认值的列?lsmepo6l3#
unix时间戳是一个大整数(自1970-01-01 00:00:00 utc以来的秒数),因此
INT(11)
是正确的数据类型。不幸的是,我不认为有任何方法可以指定一个默认值来插入当前的时间戳。你需要打电话
UNIX_TIMESTAMP()
显式地插入,并使用它。中不允许函数调用DEFAULT
规范。