golang 和 sqlite3 时间类型如何自动转换

golang time.Time 类型和 sqlite3 text 类型或者 integer 类型不能在调用 Scan() 方法时自动转换么?

如果不能,存储时间类型字段最佳实践是什么,是不是不可避免出现中间字段或者需要做手动转换?

我在使用过程中出现如下错误:

sql: Scan error on column index 5, name \"create_time\": unsupported Scan, storing driver.Value type []uint8 into type *time.Time

数据驱动库使用 github.com/mattn/go-sqlite3, 其中 golang 字段类型为 time.Time, sqlite3 中字段类型定义为 textinteger 都试过了。

阅读 6.9k
1 个回答

https://godoc.org/github.com/...

Go的time.Time对应sqlite的timestamp/datetime,建议在sqlite中用timestamp/datetime存储时间数据

如果还是要用text的话,那就用Go的String来读取,然后再用标准库做转换来获取time.Time类型:

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "Jan 2, 2006 at 3:04pm (MST)"
    t, _ := time.Parse(longForm, "Feb 3, 2013 at 7:54pm (PST)")
    fmt.Println(t)

    const shortForm = "2006-Jan-02"
    t, _ = time.Parse(shortForm, "2013-Feb-03")
    fmt.Println(t)

    t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
    fmt.Println(t)
    
    t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05+07:00")
    fmt.Println(t)
}

需要再详尽一点的话就看官方文档吧:https://golang.org/pkg/time/#...

推荐问题
宣传栏