Thi*_*key 49 postgresql postgresql-9.1
用于unix时间戳的PostgreSQL字段类型:
int(10))Ric*_*ard 73
unix epoch时间戳现在(2014-04-09)是1397071518.所以我们需要一种能够存储至少这么大的数字的数据类型.
有哪些数据类型?
如果您参考有关数字类型的PostgreSQL 文档,您将找到以下选项:
Name Size Minimum Maximum
smallint 2 bytes -32768 +32767
integer 4 bytes -2147483648 +2147483647
bigint 8 bytes -9223372036854775808 +9223372036854775807
Run Code Online (Sandbox Code Playgroud)
这在时间表示方面意味着什么?
现在,我们可以使用epoch转换器获取这些数字并将它们转换为日期:
Name Size Minimum Date Maximum Date
smallint 2 bytes 1969-12-31 1970-01-01
integer 4 bytes 1901-12-13 2038-01-18
bigint 8 bytes -292275055-05-16 292278994-08-17
Run Code Online (Sandbox Code Playgroud)
请注意,在最后一个实例中,使用秒可以使您进入过去和未来,这可能无关紧要.我给出的结果是,如果你用毫秒表示unix时期.
所以我们学了什么?
smallint 显然是一个糟糕的选择.integer目前是一个不错的选择,但你的软件将在2038年爆炸.在2038年的问题上,Y2K的启示没有任何结果.bigint是最好的选择.虽然博士可能仍然批评它,但这是针对大多数可以想象的人类需求的未来证明.您可能会或可能不会考虑将时间戳存储为其他格式(例如ISO 8601标准)是否最佳.
Gor*_*onM 24
我只是使用TIMESTAMP WITH(OUT)TIME ZONE,并在需要时使用EXTRACT获取UNIX时间戳表示.
相比
SELECT NOW();
Run Code Online (Sandbox Code Playgroud)
同
SELECT EXTRACT(EPOCH FROM NOW());
Run Code Online (Sandbox Code Playgroud)
整数会很好,但还不够好,因为 postgresql 不支持无符号类型
| 归档时间: |
|
| 查看次数: |
27534 次 |
| 最近记录: |