当我尝试从mysql数据库中获取没有照片的文章时:
func ArticlesAllText() ([]Article, error) {
var err error
var result []Article
err = database.SQL.Select(&result, "SELECT * FROM Article WHERE photo IS NULL")
if err != nil {
log.Println(err)
}
return result, standardizeError(err)
}
Run Code Online (Sandbox Code Playgroud)
我懂了
sql:列索引10上的扫描错误:不支持的扫描,将driver.Value类型存储为* string类型
字段值为时NULL。
我怎样才能解决这个问题?
您可以使用以下两种解决方案中的任何一种:-
sql.NullString在使用 scan() 之前使用 来处理该字段。或者NULL所需的字符串。''要实现第一个解决方案,请参阅@RayfenWindspear 答案。对于第二个解决方案,更新查询如下:-
SELECT colm1, colm2, COALESCE(photo, '') photo, colm4 FROM Article WHERE photo IS NULL
Run Code Online (Sandbox Code Playgroud)
对于 MySQL使用IFNULL()或COALESCE()函数,如果表达式为 NULL,则返回替代值:
对于 SQL Server使用IFNULL()或COALESCE()函数以获得相同的结果
MS Access使用IsNull函数获得相同的结果
对于 Oracle使用NVL()函数获得相同的结果
参考: https: //www.w3schools.com/sql/sql_isnull.asp
使用sql.NullString。
https://godoc.org/database/sql#NullString
我个人讨厌这种解决方案,这就是为什么我对数据库进行规范化以使没有NULLs的原因。
要么改变
var result []Article
Run Code Online (Sandbox Code Playgroud)
至
var result []sql.NullString
Run Code Online (Sandbox Code Playgroud)
然后获取这些结果,并[]Article使用文档中的检查进行检查。
或者在您的结构中,更改
Photo *string
Run Code Online (Sandbox Code Playgroud)
至
Photo sql.NullString
Run Code Online (Sandbox Code Playgroud)
并处理它作为结构而不是结构的烦恼 *string
感谢ATN,请参阅此处获取指南https://medium.com/aubergine-solutions/how-i-handled-null-possible-values-from-database-rows-in-golang-521fb0ee267