go-sql-driver/mysqlのDSNの指定

github.com

上記公式ドキュメントを読みましょうで良いのだが、DATETIME型などの日時カラムを扱いたいときはちょっと注意が必要だ。

1. parseTime

https://github.com/go-sql-driver/mysql#parsetime

まず、parseTime=true をDSNの末尾のパラメータに付ける必要がある。

2. loc

https://github.com/go-sql-driver/mysql#loc

time.Timeのロケーションを loc=US%2FPacific のように指定する必要がある。

省略した場合、Go側はロケーションをUTCとして動作するので、取得される時刻が9時間ずれてしまう。

まとめ

MySQLサーバのタイムゾーンJSTに設定しているとき、以下のように開くとよい。

db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname?parseTime=true&loc=Asia%2FTokyo")