Go语言MySQL8的时区问题解决方法

最近在用Go语言time.Now()方法写时间戳记录到MySQL里面的时候,发现写入的时间总是比实际的时间晚8个小时,而将时间在Go执行是打印出来的时候又是正常的:
2021-08-12 15:00:40.929836 +0800 CST m=+38.079002301

但是写入到MySQL表里的时间戳还是晚了8小时:
update_time
2021-08-12 07:00:41

用网上的方法查到时区设置如下:

mysql> show variables like “%time_zone”;
+——————–+———-+
| Variable_name | Value |
+——————–+———-+
| system_time_zone | |
| time_zone | SYSTEM |
+———————+———+

用MySQL命令修改时区为东8区(这个方法是没用的):

mysql> set time_zone=’+8:00′;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like “%time_zone”;
+——————–+———-+
| Variable_name | Value |
+——————–+———-+
| system_time_zone | |
| time_zone | +08:00 |
+———————+———+
2 rows in set, 1 warning (0.00 sec)

重新试着写入时间戳,发现写入的时间还是比实际的要慢8个小时,而尝试着重启MySQL服务以后,时区又变回SYSTEM了,问题还是无法解决。之后尝试通过修改MySQL的my.ini配置文件,设置时区为东8区,问题还是没解决。。。

经过了各种尝试以后,最后终于发现了解决办法,原来是注册数据库的时候没有指定时区参数导致的

dataSource := userName + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + db + "?charset=utf8mb4"

将以上代码添加上时区相关的参数parseTime=true&loc=Local,改为以下:

dataSource := userName + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + db + "?charset=utf8mb4&parseTime=true&loc=Local"

重新试着写时间到MySQL,发现时间变成正常的了,问题解决,呼~~~~

%title插图%num

相关文章 推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注