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

Why go-sql-driver fails to handle NULL in MySQL bigint field?

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

在我的用例中,

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

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

但如果我不 select queue_length,所有字段都会出现在结果集中。我正在 int64 类型的代码中扫描 queueLength 变量中的 queue_length。来自 table 的值为 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
}

queueLength 应该是 NullInt64 而不是 int64.

var queueLength sql.NullInt64

在 Go 中 ints 不能是 nil 所以 Scan 无法在 queueLength.[=20= 中保存 NULL ]

我将此工具用于 Null 和 Zero 字段,它包括许多数据类型。

github url 是 https://github.com/guregu/null