You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中ODBC无法识别查询返回结果的数据类型问题求助

解决ODBC连接SQL Server时无法识别查询结果类型的问题

针对你遇到的ODBC连接下ScanType().Name()返回空字符串的问题,可以尝试以下几种方案:

  • 改用数据库原生类型判断
    放弃依赖ScanType().Name(),转而使用ColumnTypeDatabaseTypeName()获取SQL Server返回的原生数据类型,再手动映射到Go的对应类型。示例代码:

    rows, _ := Db.Query(queryStatement)
    colsType, _ := rows.ColumnTypes()
    dbType := colsType[i].ColumnTypeDatabaseTypeName()
    switch dbType {
    case "BIGINT":
        // 处理int64类型逻辑
    case "INT":
        // 处理int32类型逻辑
    case "SMALLINT":
        // 处理int16类型逻辑
    case "DATETIME", "DATETIME2":
        // 处理Time类型逻辑
    case "FLOAT":
        // 处理float64类型逻辑
    case "BIT":
        // 处理bool类型逻辑
    case "VARCHAR", "NVARCHAR", "CHAR":
        // 处理string类型逻辑
    default:
        // 其他类型处理
    }
    
  • 升级ODBC驱动版本
    旧版SQL Server ODBC驱动可能存在类型映射的兼容性问题,建议升级到最新的ODBC Driver 18 for SQL Server,修复已知的类型识别bug。

  • 显式指定返回类型
    对于COUNT(*)这类查询,强制转换为明确的数值类型,让ODBC驱动能正确识别:

    SELECT CAST(COUNT(*) AS BIGINT) FROM MY_TABLE
    
  • 直接通过Scan尝试类型匹配
    跳过类型检测,直接尝试将结果Scan到目标类型变量,根据错误判断类型:

    var val int64
    err := rows.Scan(&val)
    if err == nil {
        // 确认是int64类型,执行对应逻辑
    } else {
        // 尝试其他类型,比如int32
        var val32 int32
        if err2 := rows.Scan(&val32); err2 == nil {
            // 处理int32逻辑
        }
    }
    

内容的提问来源于stack exchange,提问作者Zedi Zedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:20:13