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

ClickHouse时区问题:Asia/Tehran时区时间偏移异常

ClickHouse Asia/Tehran时区偏移错误解决指引

问题原因

伊朗的时区规则(夏令时/标准时切换)存在更新,但你的ClickHouse实例依赖的时区数据库未同步到最新规则,导致Asia/Tehran被解析为UTC+04:30而非预期的UTC+03:30。

解决步骤

1. 检查时区数据库版本

先确认ClickHouse使用的时区数据版本:

SELECT timezoneDatabase();

如果返回版本低于2024a(或对应年份的最新tzdata版本),说明需要更新时区数据。

2. 更新时区数据库

根据部署方式选择对应操作:

  • Linux物理机/虚拟机部署:
    升级系统的tzdata包(ClickHouse会复用系统时区数据):

    # Debian/Ubuntu
    sudo apt update && sudo apt install --only-upgrade tzdata
    
    # RHEL/CentOS/Rocky Linux
    sudo dnf update tzdata
    

    升级完成后重启ClickHouse服务:

    sudo systemctl restart clickhouse-server
    
  • Docker部署:
    拉取最新的ClickHouse官方镜像(新版本默认包含更新的tzdata):

    docker pull clickhouse/clickhouse-server:latest
    

    重启容器:

    docker restart <你的ClickHouse容器名称>
    

3. 验证修复效果

重新执行原查询验证结果:

SELECT formatDateTime(now(), '%Y-%m-%d %H:%M:%S', 'Asia/Tehran');

也可以同时对比UTC时间确认偏移量:

SELECT 
  now() AS utc_time, 
  formatDateTime(now(), '%Y-%m-%d %H:%M:%S', 'Asia/Tehran') AS tehran_time;

正常情况下tehran_time应为utc_time减去3小时30分。

4. 临时 workaround(无法立即更新时)

如果暂时无法更新时区数据,可通过以下方式临时修正:

  • 手动调整时间偏移:
    SELECT formatDateTime(date_add('minute', -210, now()), '%Y-%m-%d %H:%M:%S') AS tehran_time;
    
  • 设置会话级时区为固定偏移:
    SET time_zone = 'UTC+03:30';
    SELECT formatDateTime(now(), '%Y-%m-%d %H:%M:%S');
    

内容的提问来源于stack exchange,提问作者Bahram Jannesar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:04:58