go-sql-driverでDateTimeを扱う

github.com

デフォルトではDATETIMEの扱いでエラーが出てしまう。

f:id:hawaiiantime:20190213104940p:plain

DSN(Data Source Name)にparseTimeとlocパラメータを付与することで、マッピングがうまくいく。

DBMS := "mysql"
USER := "root"
PASS := ""
PROTOCOL := "tcp(127.0.0.1:3306)"
DBNAME := "foo"

CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?parseTime=true&loc=Asia%2FTokyo"
db, err := sql.Open(DBMS, CONNECT)

parseTime=trueで、DATETIMEが[]byteではなくtime.Timeに変換される。
そのままだと標準時扱いなのでloc=Asia/Tokyoの指定を追加。
url.QueryEscape'ed されている必要があるのでloc=Asia%2FTokyoとなる。

https://github.com/go-sql-driver/mysql#timetime-support
f:id:hawaiiantime:20190213110240p:plain

参考

github.com/go-sql-driver/mysql での datetimeとtime.Timeのマッピング
go-sql-driver/mysqlのDSNの指定