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
相关产品推荐
相关产品推荐

