写真なしで記事を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
の場合。
どうすれば修正できますか?
sql.NullString
を使用します。
https://godoc.org/database/sql#NullString
個人的には、私はこのソリューションが嫌いです。そのため、NULL
sがないようにDBを正規化します。
どちらかを変える
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 =
以下の2つのソリューションのいずれかを使用できます。
sql.NullString
_を使用してフィールドを処理できます。またはNULL
値を、クエリ自体の_''
_などの目的の文字列で置き換えることができます。最初のソリューションの実装については、@ RayfenWindspearの回答を参照してください。 2番目のソリューションでは、クエリを次のように更新します。
_SELECT colm1, colm2, COALESCE(photo, '') photo, colm4 FROM Article WHERE photo IS NULL
_
MySQLの場合、IFNULL()
またはCOALESCE()
関数を使用して、式がNULLの場合に代替値を返します。
SQL Serverの場合、同じ結果を得るにはIFNULL()
またはCOALESCE()
関数を使用します
MS AccessIsNull
関数を使用して同じ結果を得る
Oracleの場合、同じ結果を得るにはNVL()
関数を使用します