关于grafana展示MySQL数据时会有八个小时的时差问题

Grafana在使用Mysql数据源时,发现显示时间比正常时间多8小时。

我们可以在查询中将时间改成 UNIX_TIMESTAMP(your_date) AS "time",或者将时区改成UTC+00:00就可以解决了,但这样会导致你查询时间跟你的实际时间有时差,治标不治本。所以还是建议使用UNIX_TIMESTAMP(your_date) AS "time"

SELECT 
  UNIX_TIMESTAMP(ts.time_point) AS 'time', 
  ma.MeterAdd AS '地址'
from loadcurvedata
WHERE
  $__timeFilter(ts.time_point)

✅ 为什么时差是个问题?

在数据库中,create_date 往往是 带时区的本地时间(比如北京时间),而:

  • Grafana 的时间处理是基于 UTC 的(协调世界时);

  • 如果直接传字符串时间(如 '2025-04-14 10:00:00'),Grafana 会认为它是 UTC;

  • 这就会导致显示结果有 8小时的误差(中国比 UTC 快 8 小时)。

✅ 为什么用 UNIX_TIMESTAMP() 能避免时差?

  • UNIX_TIMESTAMP(create_date) 会把 create_date 转换为一个 整数时间戳,单位是秒;

  • 时间戳是一个 全球统一标准,从 1970年1月1日 UTC 零点开始计算;

  • Grafana 内部处理时间戳时就不会再发生“我以为你是UTC但你其实是东八区”的问题了。

换句话说:

时间戳 = 消除了“本地时间 vs UTC”的歧义

✅ 为什么字段必须叫 "time"

Grafana 有一个约定俗成的要求:

🔹 在 SQL 查询中,字段名为 "time" 的列,会被 Grafana 自动识别为时间戳字段,用于绘制时间轴。

如果你不把时间字段命名为 "time",Grafana 就 无法识别哪个字段是时间维度,你的图表可能就会报错或者不显示数据。如果你是做表格展示(Table Panel),时间字段其实可以不是 "time",但是你叫 "time"可以避免时差问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值