使用gorm 连接tidb 出现时区问题

v4.0.8
使用gorm 查询tidb 的datetime字段的类型出现8小时时差问题
image

golang 程序中的配置为
//dsn := fmt.Sprintf(“%s:%s@tcp(%s)/%s?timeout=%s&readTimeout=%s&writeTimeout=%s&parseTime=True&loc=Asia%%2FShanghai”
使用的部分gorm 代码如下
image

理论来说datetime 字段的类型不包含时区信息,但是为啥在gorm 中查询到的数据会有时差问题 ?
在去掉最后的 loc=Asia%%2FShanghai" 数据就恢复了正常 。
由于我们线上业务使用的是统一的框架配置,所以想分析下背后的逻辑是什么 ?

字段类型是 datetime 所以插入的是什么值,取出来的就是什么值,不受 timezone 的影响

gorm 取出这个字段的值之后,又做了处理(因为你们配置了 parseTime=True 以及 loc=Asia/Shanghai ),所以应该是 gorm 代码的问题,不是 tidb 的问题,你可以用 mysql cli 查一下验证一下。

1 个赞

好的。多谢,也怀疑是gorm 的问题,架构组的同事在查了

:+1:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。