GoLang time 与MySql timestamp

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 在操作的时候也有时区的设置

解决方案:

  1. 在链接MySql时,添加 parseTime=true&loc=Local 两个参数

问题衍生:

使用mysql的时间函数 now() 时,还是会有问题,以上的方案,只会在写入MySql时,会对 time.time 进行转换,并不会响应链接上,针对 mysql 时区 time.zone 的配置有影响

解决:

在链接参数添加针对mysql time.zone 的配置 - 不推荐

推荐 - 可以在程序代码中把时间戳计算出来之后,再把SQL发送到服务器执行

参考

http://www.coder55.com/article/24159