Golang连接mysql插入时间早8个小时

问题描述

使用Golang操作Mysql,插入一条记录后发现新插入的时间比当前时间早了8个小时。

  1. 使用go-sql-driver来连接mysql数据库,获取的时区默认是UTC +0的,与本地的东八区是有区别,在业务处理中会出现问题

  2. 获取mysql中的日期,是string类型,需要在代码中用time.Parse进行转化

解决方案

在连接的dataSourceName中加上parseTime=Trueloc=local。此处的local可以更换为具体的时区(Asia/Shanghai)

修改之前的dataSourceName

1
2
3
dataBaseSource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", 
MysqlUser, MysqlPassword, MysqlHost, MysqlPort, MysqlDatabase, MysqlCharset)
conn, _ := sql.Open("mysql", dataBaseSource)

修改后的dataSourceName

1
2
3
dataBaseSource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&loc=Local&parseTime=true", 
MysqlUser, MysqlPassword, MysqlHost, MysqlPort, MysqlDatabase, MysqlCharset)
conn, _ := sql.Open("mysql", dataBaseSource)
Golang