gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:55:09 51 4
gpt4 key购买 nike

我正在使用 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
}

最佳答案

queueLength 应该是 NullInt64而不是 int64

var queueLength sql.NullInt64

在 Go 中 int 不能是 nil 所以 Scan 没有办法保存 NULL 队列长度

关于mysql - 为什么 go-sql-driver 无法处理 MySQL bigint 字段中的 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34350074/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com