PostgreSQL:没有时区的时间戳的不同输出,具体取决于客户端



我对我的PostgreSQL数据库为timestamp(0) without time zone字段返回不同的结果感到困惑。假设我有一张桌子t

create table t (
    x timestamp(0) without time zone
);
insert into t select now();

现在,当我从不同的客户端运行select * from t时,我得到不同的输出。

  • PSQL:2014-04-06 10:22:57

  • JDBC:2014-04-06 10:22:57:000
    (driver postgresql-9.3-1101.jdbc4.jar 通过 SQLExplorer eclipse 插件运行)

  • 节点-PG:Sun Apr 06 2014 10:22:57 GMT+0200 (CEST)

在这三者中,只有 PSQL 是我期望(和需要)的输出。为什么会发生这种情况,如何在不必显式转换查询的情况下修复它?

如果您希望数据库返回时间戳的特定字符串格式,通常应在查询中请求它。

to_char(the_timestamp_col, 'YYYY-MM-DD HH:MI:SS')

请参阅文档中的to_char

或者,您可以使用客户端应用程序语言的功能根据需要设置时间戳的格式。对于功能更丰富的语言,这通常是更好的选择。

虽然PostgreSQL通常通过查询协议返回日期的特定文本格式,但客户端可以自由选择使用二进制协议,在这种情况下,它们将在纪元秒内获得宽整数值。与其依赖 PostgreSQL 协议中的值按照您想要的方式格式化,不如准确询问您需要的内容。

将数据库表示形式转换为 时间戳与时区。 时期。 它不会改变存储,而是增加了精度。 如果没有时区,TIMESTAMP 的精度为 +/- 24 小时。

相关内容

  • 没有找到相关文章

最新更新