Clickhouse 返回的时间不正确

Posted

技术标签:

【中文标题】Clickhouse 返回的时间不正确【英文标题】:Incorrect time returned from Clickhouse 【发布时间】:2020-11-25 08:58:47 【问题描述】:

我在 ClickHouse 数据库中观察 strage 的东西

当我在 WHERE 条件中指定日期时间时,clichouse 会将我的请求移动一小时。具有 DateTime 类型的每个表都会发生这种情况

我的机器位于莫斯科时区 UTC+3 服务器位于 CET timezome UTC+1 莫斯科没有夏令时,但问题前段时间就出现了 我认为这是因为欧洲按小时移动时间

例如,给我 23:59 到 00:19 之间的记录 datetime 列具有 DateTime 类型

select datetime from ticker_arch
where
datetime <= '2020-11-23 00:10:00' and
datetime >= '2020-11-22 23:59:00'
order by datetime desc

result 给出了 22:59 到 23:10 之间的记录

2020-11-22 23:09:46
2020-11-22 23:09:46
2020-11-22 23:09:46
2020-11-22 23:09:46

当我在 Datagrip 和我的代码 DBContext 中运行查询时会发生这种情况 请推荐

【问题讨论】:

列数据类型? @jarlh 日期时间 【参考方案1】:

这是 CH JDBC 驱动程序的预期行为。

JDBC 驱动程序将 DateTime 值(到它们的字符串表示形式)从 CH 服务器时区转换为本地(对于 JVM)时区。

https://github.com/ClickHouse/ClickHouse/issues/17387


CH 客户端也一样:

# clickhouse-client --use_client_time_zone=1 -q "select now(), toString(now())"
2020-11-25 19:02:31 2020-11-25 20:02:31

# TZ=Europe/Moscow clickhouse-client --use_client_time_zone=1 -q "select now(), toString(now())"
2020-11-25 22:02:59 2020-11-25 20:02:59

now() -- 由客户端使用本地时区呈现为字符串

toString(now()) -- 由服务器使用 servertimezone 渲染为 String

【讨论】:

以上是关于Clickhouse 返回的时间不正确的主要内容,如果未能解决你的问题,请参考以下文章

clickhouse索引

Apache Doris 和 ClickHouse 的选型比较

Code: 210. DB::NetException: Connection refused (localhost:9000)

“DB::Exception: RangeReader read 7523 rows, but 7550 expected”异常在clickhouse中是啥意思?

将新节点添加到 Clickhouse 集群的正确方法是啥?

Clickhouse 客户端无法在 linux 屏幕上正确显示数据