为什么 go-sql-driver 无法处理 MySQL bigint 字段中的 NULL?

我正在使用go-sql-driver连接到 MySQL 数据库。在我的一张表中,我使用一个名为 queue_length 的字段作为 BIGINT。该字段默认为 NULL。当我尝试在 Golang 中使用 go-sql-driver 查询表中的所有字段时,queue_length 之后的字段没有出现在包括 queue_length 在内的结果集中。


在我的用例中,


表字段 [unique_id, qid, title, text, queue_length, user_id, date_created, last_updated]


当我执行以下代码时,我获得了 queue_length 之前字段的值,但 [queue_length, user_id, date_created, last_updated] 字段没有出现在结果集中。


但是,如果我不选择 queue_length,则所有字段都将出现在结果集中。我正在扫描类型为 int64 的代码中 queueLength 变量中的 queue_length。来自表的值为 NULL。我也试过类型转换。没用。


这是 go-sql-driver 中的错误还是我做错了什么?有人可以帮我解决这个问题吗?


func GetQueues(uniqueId string) ([]*objects.Queue, error) {

    db, err := GetDBConnection()

    defer db.Close()


    rows, err := db.Query("SELECT qid, title, text, queue_length, user_id, date_created, last_updated FROM queue WHERE unique_id = ?", uniqueId)

    if err != nil {

        panic(err.Error())

    }

    defer rows.Close()


    var qId             string

    var title           string

    var text            string

    var userId          string

    var dateCreated     string

    var lastUpdated     string

    var queueLength     int64

    var queue           *objects.Queue

    var queues          []*objects.Queue


    for rows.Next() {

        err           = rows.Scan(&qId, &title, &text, &queueLength, &userId, &dateCreated, &lastUpdated)

        queue         = &objects.Queue{ QId: qId, Title: title, Text: text, UniqueId: uniqueId, UserId: userId, DateCreated: dateCreated, LastUpdated: lastUpdated, QueueLength: queueLength }

        queues        = append(queues, queue)

    }

    err = rows.Err()


    if err != nil {

        panic(err.Error())

        return nil, err

    }

    return queues, err

}


holdtom
浏览 250回答 2
2回答

杨魅力

queueLength应该是一个NullInt64而不是一个int64。var queueLength sql.NullInt64在围棋ints不能是nil那么有没有办法Scan保存NULL在queueLength。

萧十郎

我将此工具用于 Null 和 Zero 字段,它包含许多数据类型。github 网址是https://github.com/guregu/null
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go