我有以下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)
但它似乎不适用于时间戳或日期时间.有任何想法吗?
这是一个谷歌小组讨论,讨论几乎与你的问题相同的问题.
这部分取自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的行,然后使用以下某个功能:
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |