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

db, err := sql.Open("mysql", "user:passward@/dbname?parseTime=true")

みたいな感じで、parseTime=trueを設定してやる必要がある。https://github.com/go-sql-driver/mysql/blob/v1.1/packets.go#L649

ただ、これだとdatetime->time.Timeにparseする際に標準時として行なわれるので、parseTime=true&loc=SOME_LOCATIONと、locを設定する必要がある。

古いバージョンだと、loc=Asia/Tokyoとかをparseできないのでloc=Japanとかって指定すると良いと思う。https://github.com/go-sql-driver/mysql/commit/7503ab8073eb37c533ac4a211e9a9f469e5cd267 でescapeしたのを渡すようになってるので、これ以降のバージョンだと locl=Asia%2FTokyo って渡してやれば良い。


go get -u の挙動が良くわかってなくて、今まっさらな環境で go get github.com/go-sql-driver すると、v1.1が入るのに、 v1.0.2 が 入った環境で go get -u github.com/go-sql-driver してもupdateされなくて困ってる。

go get -u でupdateされなかった理由

  • go get はgo1 tag or branchがあれば、それを取ってくる
  • github.com/go-sql-driver/mysql では、go1 tag を持ってる
  • go get -u github.com/go-sql-driver/mysql
  • go get -u(git fetch)でtagのupdateがfetchされない
  • go1 tagに変化がない
  • updateされない