使用ziutek/mymysql在Go中选择NULL时间戳

Bli*_*Top 2 mysql go

我有以下Google Go和MySql,其中有date_update问题的字段经常作为NULL值返回.

var date_update time.Time
query := `SELECT date_update FROM users WHERE user_id=?`
err := conn.QueryRow(query, user_id).Scan(&date_update)
Run Code Online (Sandbox Code Playgroud)

当我运行此查询并碰巧收到该字段的空值之一时,我收到错误 unsupported driver -> Scan pair: <nil> -> *time.Time

我使用其他数据类型处理此方法(例如INT)

SELECT IFNULL(integer_field, 0) FROM table
Run Code Online (Sandbox Code Playgroud)

但它似乎不适用于时间戳或日期时间.有任何想法吗?

Mar*_*arc 5

这是一个谷歌小组讨论,讨论几乎与你的问题相同的问题.

这部分取自go-sql-drivers/mysql 存储库的README .

time.Time支持

MySQL DATE和DATETIME值的默认内部输出类型是[] byte,它允许您将值扫描到程序中的[] byte,string或sql.RawBytes变量中.

但是,许多人希望将MySQL DATE和DATETIME值扫描到time.Time变量中,这与MySQL中的Go to DATE和DATETIME中的逻辑相反.您可以通过使用DSN参数parseTime = true将内部输出类型从[] byte更改为time.Time来实现.您可以使用loc DSN参数设置默认time.Time位置.

注意:从Go 1.1开始,这使得time.Time成为唯一可以将DATE和DATETIME值扫描到的变量类型.这打破了例如sql.RawBytes支持.

或者,您可以使用NullTime类型作为扫描目标,它与time.Time和string/[]字节一起使用.

您必须向您的DSN添加parseTime = true才能将其自动解析为time.Time或使用NullTime.


使用mymysql

您可以尝试选择具有特定ID的行,然后使用以下某个功能: