go
type_error
ai_generated
true
error: sql: 扫描第1列(age)时出错:无法将 driver.Value 类型 int64 转换为 uint8
error: sql: Scan error on column index 1, name "age": converting driver.Value type int64 ("25") to a uint8: invalid syntax
ID: go/sql-rows-scan-type-mismatch
80%修复率
88%置信度
0证据数
2024-01-10首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 1.20 | active | — | — | — |
根因分析
查询结果列类型与 Go 变量声明不匹配,database/sql 在扫描时无法进行窄类型转换。
English
数据库返回 int64 类型,但目标变量声明为 uint8,导致类型转换失败。
解决方案
-
95% 成功率
将目标变量改为 int64 或 sql.NullInt64
-
80% 成功率
在 SQL 查询中使用 CAST(age AS UNSIGNED) 预转换
无效尝试
常见但无效的做法:
-
80% 失败
database/sql 内部处理类型转换,断言无效且可能 panic
-
70% 失败
数据错误被静默忽略,导致业务逻辑使用错误数据