首页 > 解决方案 > sql.Query 被截断或不完整的结果

问题描述

我有以下代码:

const qInstances = `
SELECT
    i.uuid,
    i.host,
    i.hostname
FROM
    db.instances AS i
WHERE
    i.deleted_at IS NULL
GROUP BY i.uuid;
`
...
    instancesMap := make(map[string]*models.InstanceModel)
    instances := []models.Instance{}

    instancesCount := 0

    instancesRow, err := db.Query(qInstances)

    if err != nil {
        panic(err.Error())
    }
    defer instancesRow.Close()

    for instancesRow.Next() {
        i := models.Instance{}
        err = instancesRow.Scan(&i.UUID, &i.Host, &i.Hostname)
        if err != nil {
            log.Printf("[Error] - While Scanning Instances Rows, error msg: %s\n", err)
            panic(err.Error())
        } else {
            if i.UUID.String != "" {
                instancesCount++
            }

            if _, ok := instancesMap[i.UUID.String]; !ok {
                instancesMap[i.UUID.String] = &models.InstanceModel{}
                inst := instancesMap[i.UUID.String]
                inst.UUID = i.UUID.String
                inst.Host = i.Host.String
                inst.Hostname = i.Hostname.String
            } else {
                inst := instancesMap[i.UUID.String]
                inst.UUID = i.UUID.String
                inst.Host = i.Host.String
                inst.Hostname = i.Hostname.String
            }
            instances = append(instances, i)
        }
    }
    log.Printf("[Instances] - Total Count: %d\n", instancesCount)

我面临的问题是,如果直接对数据库(mariadb)运行 SQL 查询,它将返回 7150 条记录,但程序内的总计数输出 5196 条记录。我还检查了 db 连接的 SetConnMaxLifetime 参数并将其设置为 240 秒,它没有显示任何错误或 db 和程序之间的连接中断。此外,我尝试进行一些分页(每个限制为 5000 条记录)并发出两个不同的查询,第一个返回 5000 条记录,但第二个只有 196 条记录。我正在使用“github.com/go-sql-driver/mysql”包。有任何想法吗?

标签: mysqlgomariadbtruncated

解决方案


推荐阅读