經過golang從mysql中查詢datetime字段,本想參考以前普通類型查詢,只要將變量類型修改成time.Time就能夠:mysql
rows, err := db.Query("select login_time from user where id=1") for rows.Next() { var lastLoginTime time.Time err = rows.Scan(&lastLoginTime) if err != nil { panic(err) } fmt.Println(lastLoginTime) }
運行代碼並無獲得預期的結果,運行出錯,err信息爲:git
sql: Scan error on column index 1: unsupported driver -> Scan pair: []uint8 -> *time.Time
經過google得出的解決方法是先將datetime的字面值賦值給string變量。而後經過time.Parse(layout, value)轉換爲time.Time類型github
var lastLoginTime string err = rows.Scan(&lastLoginTime) loginTime, _ := time.Parse("2006-01-02 15:04:05", lastLoginTime) fmt.Println(loginTime)
運行結果爲golang
2018-05-22 13:22:51 +0000 UTC
這裏爲UTC時間,若是須要使用當地時區能夠使用time.ParseInLocation(layout, value, loc)指定當地時區sql
DefaultTimeLoc := time.Local loginTime, err := time.ParseInLocation("2006-01-02 15:04:05", lastLoginTime, DefaultTimeLoc)
完整代碼
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "time" ) func main() { db, err := sql.Open("mysql", "root:root@tcp(localhost:3306)/golang?charset=utf8") checkErr(err) rows, err := db.Query("select id,login_time from user where id=1") checkErr(err) for rows.Next() { var id int var lastLoginTime string err = rows.Scan(&id, &lastLoginTime) checkErr(err) DefaultTimeLoc := time.Local loginTime, err := time.ParseInLocation("2006-01-02 15:04:05", lastLoginTime, DefaultTimeLoc) checkErr(err) fmt.Println(loginTime) } db.Close() } func checkErr(err error) { if err != nil { panic(err) } }