Golang 在定义与MySql表对应的结构体时,两个时间的对应关系如下
MySql - movie_info 表的 modify_time 字段类型为[timestamp]
结构体的定义
ModifyTime time.Time `orm:"column(modify_time)"`
在插入数据的时候,会有8个小时的时差
如上图,第1、2条记录与第3条记录的create_time相差不大,便 modify_time却时区的问题,MySQL服务器有时区的设置,Golang Time 在操作的时候也有时区的设置
解决方案:
- 在链接MySql时,添加 parseTime=true&loc=Local 两个参数
问题衍生:
使用mysql的时间函数 now() 时,还是会有问题,以上的方案,只会在写入MySql时,会对 time.time 进行转换,并不会响应链接上,针对 mysql 时区 time.zone 的配置有影响
解决:
在链接参数添加针对mysql time.zone 的配置 - 不推荐
推荐 - 可以在程序代码中把时间戳计算出来之后,再把SQL发送到服务器执行
参考