我正在使用golang,并且我正在try 从MySQL读取时间,并且我收到以下错误.
var my_time time.Time
rows, err := db.Query("SELECT current_time FROM table")
err := rows.Scan(&my_time)
我得到的错误是
unsupported driver -> Scan pair: []uint8 -> *time.Time
我该怎么解决这个问题?
我正在使用golang,并且我正在try 从MySQL读取时间,并且我收到以下错误.
var my_time time.Time
rows, err := db.Query("SELECT current_time FROM table")
err := rows.Scan(&my_time)
我得到的错误是
unsupported driver -> Scan pair: []uint8 -> *time.Time
我该怎么解决这个问题?
假设你使用的是go-sql-driver/mysql
,你可以要求驱动自动扫描日期和日期时间到time.Time
,方法是将parseTime=true
添加到你的连接字符串中.
见https://github.com/go-sql-driver/mysql#timetime-support
示例代码:
db, err := sql.Open("mysql", "root:@/?parseTime=true")
if err != nil {
panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic
}
defer db.Close()
var myTime time.Time
rows, err := db.Query("SELECT current_timestamp()")
if rows.Next() {
if err = rows.Scan(&myTime); err != nil {
panic(err)
}
}
fmt.Println(myTime)
请注意,这适用于current_timestamp
,但不适用于current_time
.如果您必须使用current_time
,您需要自己进行解析.
首先,我们定义了一个自定义类型包装[]byte,它将自动解析时间值:
type rawTime []byte
func (t rawTime) Time() (time.Time, error) {
return time.Parse("15:04:05", string(t))
}
在扫描码中,我们只需这样做:
var myTime rawTime
rows, err := db.Query("SELECT current_time()")
if rows.Next() {
if err = rows.Scan(&myTime); err != nil {
panic(err)
}
}
fmt.Println(myTime.Time())