最近在用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,发现时间变成正常的了,问题解决,呼~~~~
版权声明:除特殊说明,文章均为博主 去吐槽 原创文章,转载请注明原文出处。