gorm 遇坑总结

time 包 和 gorm 执行的问题

知识点

我们都知道,使用 golang 的 time 包可以对时间格式进行转换,比如:

  • time.xxx.Format() 可以将 time.time 格式转换为 string 格式
  • time.Parse 可以将 string 格式转换为 time.time 格式

坑点

time.Parse 默认转出来是 +0000 UTC 时间,不是中国东八区的 +0800 CST 时间,传给数据库执行的时候,会出现时间推迟 8 小时的情况,且不好排查(因为 SQL debug 打印出来的看不出异常,拿着语句直接去数据库上可以执行)。
在尝试了多种 SQL 姿势之后,还是一样的效果,最后连上 MySQL 分析实际执行的语句才发现异常。

到 MySQL 上查看执行的查询语句的方法:

pager grep [ip]     # 设置过滤出执行脚本的机器 IP
show full processlist   # 查看 MYSQL 现在正在执行的语句

解决

需要用 time.ParseInLocation 方法替换 time.Parse ,这样转换出来的时间就是 +0800 CST 时间

执行原生 SQL 问题

知识点

在执行一些复杂语句或者排查问题的时候,会直接使用 原生 SQL ,这样可能会直观一些;

坑点

原生 SQL 执行查询时,默认只能选出一行数据来,需要查询多行时,得多一步处理

https://jasperxu.github.io/gorm-zh/advanced.html#sb

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值