go-sql-driver/mysqlのDSNの指定
go-sql-driver/mysqlのDSNの指定について
上記公式ドキュメントを読みましょうで良いのだが、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")