我正在使用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())

Database相关问答推荐

避免数据库联接的两个查询替换

DBMS_RANDOM 是否默认安装?

使用 Npgsql 执行年龄查询并在 .NET 应用程序中返回结果?

为什么引用 SQLite rowid 会导致外键不匹配?

创建数据库索引有哪些最佳实践和经验法则?

复合主键

使用 cloud-spanner 进行本地开发

什么技术对处理数百万条记录最有效?

SQLServer:如何对按外键依赖性排序的表名进行排序

我们如何使用 Hibernate 和 JPA 调用存储过程?

如何更改 Heroku 中的列类型?

Followers/following 关注者表数据库 struct

从 activerecord 获取索引哈希

在服务器上排序还是在客户端排序?

如何在实体-属性-值设计中处理不同的数据类型(例如,具有多列的单个表或每种数据类型的多个表)?

EF4 代码优先导致 InvalidOperationException

如何在我的 SQL Server 代理作业(job)中创建一个将运行我的 SSIS 包的步骤?

在mysql中 Select 不同的2列组合

复制没有 LOCK 权限的 postgres 数据库

数据库索引及其 Big-O 表示法