问题描述

使用jetbrain的DataGrip访问clickhouse的datatime类型数据的时候,时间会-8小时

环境描述:使用docker 启动的clickhouse,clickhouse 版本为:21.1.2.15

尝试解决方法

1. docker配置文件中指定时区:

具体文件为:/root/clickhouse/conf/config.xml

<timezone>Asia/Shanghai</timezone>

但是不生效,查询出来的数据还是需要 +8 小时

2. 修改docker容器时区信息

参考文章:date格式数据导入表中,时间发生+8时区变化,修改容器的环境变量:

# 进入容器
docker exec -it clickhouse-server /bin/bash
​
# 查看 TZ,返回结果为UTC
echo $TZ
​
# 修改 TZ 的值为:Asia/Shanghai
export TZ='Asia/Shanghai'
source ~/.bashrc
​
# 但是这种方式重启不生效,重启docker容器后,时区还是 UTC,可以通过创建并运行容器,通过 -e TZ="Asia/Shanghai" 设置时区
docker run -d 
--name clickhouse-server 
--ulimit nofile=262144:262144 
-p 8123:8123 -p 9000:9000 -p 9009:9009 
-e TZ="Asia/Shanghai" 
-v /Users/xx/tmp/docker-volume/clickhouse:/var/lib/clickhouse 
-v /Users/xx/tmp/docker-volume/clickhouse/config.xml:/etc/clickhouse-server/config.xml 
yandex/clickhouse-server
​
# 删除老的容器,使用上述脚本重启容器,查看 $TZ,已经变成
Asia/Shanghai
​
# 但是从ck中查看效果,还是未生效
select Now();

3. 修改Jetbrain DataGrip的clickhouse连接配置

发现直接通过 clickhouse-clinet 执行查询发现日期数据是对的,但是从 jetbrain的 dataGrip 中查询的时间不对,应该是jetbrain的对时间做特殊处理了。参考文章 DATAgrip连接clickhouse时区显示异常解决解决。

image-20210316170343005
注意:use_time_zone 的参数值为:Shanghai 不要写成 Asia/Shanghai。执行 select now(); 命令,查看结果正确。


week
4 声望2 粉丝

引用和评论

0 条评论