You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL插入指定时区的timestamp with time zone为何转为默认时区存储?

为什么插入的带时区时间会被转为UTC存储?

PostgreSQL 的 timestamp with time zone(简称 timestamptz)类型不会存储你输入时指定的时区信息,它的工作逻辑是:

  • 接收带时区的时间值后,会自动将其转换为 UTC(协调世界时)时间戳进行存储。你插入的 2010-10-10 10:10:10.000000 +03:00 对应的UTC时间就是 2010-10-10 07:10:10.000000 +00:00,这就是你看到的存储值。
  • 当你查询该字段时,PostgreSQL 会根据当前会话的 timezone 参数,把UTC时间转换回对应时区的时间格式展示。比如执行以下命令后查询:
    SET timezone = '+03:00';
    SELECT date_time FROM owner;
    
    你就能看到和插入时一致的 2010-10-10 10:10:10.000000 +03:00。

如果需要保留原始的时区信息,你需要额外添加一个字段来存储时区标识,比如:

ALTER TABLE owner ADD COLUMN tz varchar;
INSERT INTO owner(date_time, tz) VALUES (timestamp with time zone '2010-10-10 10:10:10.000000 +03:00', '+03:00');

内容的提问来源于stack exchange,提问作者Anton Kozub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:40:31