5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Goのgo-sql-driver/mysqlでMySQLとタイムゾーンがずれる

Last updated at Posted at 2020-01-15

go-sql-driver/mysqlを使ってMySQLにSQLを投げて、その結果をあれこれするAPIを作成していたときにちょっとはまったことのメモ。

問題の発覚

MySQLのタイムゾーンの確認。

show variables like '%time_zone%'
=>
|Variable_name|Value|
|system_time_zone|UTC|
|time_zone|SYSTEM|

MySQLのタイムゾーンがUTCなのにgo-sql-driver/mysqlを使ったSQLの実行結果を見るとJSTで返ってきてしまっていた。

MySQL: 2020-01-01 00:00:00 UTC
SQL実行結果のパース: 2020-01-01 00:00:00 JST

そこでmain.goに下記を書いて、Goアプリケーションでのタイムゾーンを確認。

main.go
fmt.Println(time.Now())
=> 2020-01-15 13:46:07.4988314 +0000 UTC m=+1.180576601

で返ってきていた。

Goアプリケーション内でもMySQLでもUTCなのになんでSQLの実行結果だけJSTになるんだ???

解決

上記の記事を見ていて気づいたが、

mysql.go
db, err := sql.Open("mysql", "xxxx:zzzzzzz@/dbname?parseTime=true&loc=Asia%2FTokyo")

としてしまっていたため、MySQLがUTCなのにGoで受け取ったときはそれにJSTのラベルをわざわざ付けてしまっていた…
そこで下記のように修正。

mysql.go
db, err := sql.Open("mysql", "xxxx:zzzzzzz@/dbname?parseTime=true")

単純な理由だけど1時間位はまったのでメモ。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?