当我尝试从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)
}
我得到了
sql:列索引10上的扫描错误:不支持扫描,存储 driver.Value类型为* string
类型
当字段值为NULL
时。
我该如何解决这个问题?
答案 0 :(得分:3)
使用sql.NullString
。
https://godoc.org/database/sql#NullString
就个人而言,我讨厌这个解决方案,这就是为什么我规范化我的数据库以便没有NULL
s。
要么改变
var result []Article
要
var result []sql.NullString
然后使用文档中的检查来获取这些结果并生成[]Article
。
或者在您的结构中,更改
Photo *string
要
Photo sql.NullString
处理它作为结构而不是*string
感谢ATN,请点击此处查看指南https://medium.com/aubergine-solutions/how-i-handled-null-possible-values-from-database-rows-in-golang-521fb0ee267
答案 1 :(得分:1)
您可以使用以下两种解决方案中的任何一种:-
sql.NullString
处理该字段。或NULL
值替换为查询本身中所需的字符串,例如''
。要实现第一种解决方案,请参阅@RayfenWindspear答案。 对于第二种解决方案,请更新查询,如下所示:-
SELECT colm1, colm2, COALESCE(photo, '') photo, colm4 FROM Article WHERE photo IS NULL
对于MySQL ,如果表达式为NULL,请使用IFNULL()
或COALESCE()
函数返回备用值:
对于SQL Server ,使用IFNULL()
或COALESCE()
函数可获得相同的结果
MS Access 使用IsNull
功能可获得相同的结果
对于Oracle ,使用NVL()
函数可获得相同的结果