database/sql
标准本身 不支持 uint64。rsc 的看法([1], [2])是:
有 proposal 期望 Go 2 的 ColumnType
中可以 加入 signedness 信息,但是被拒绝了。
go-sql-driver/mysql 在 2015 年已经 实现了对 uint64 的支持。你可以:
Exec
)使用 uint64 对象作为写入参数GORM(v1.22.4)也实现了对 BIGINT UNSIGNED
列的(非完美)支持(当然是在 go-sql-driver/mysql 的基础上)。GORM 可以把数据保存到:
struct
value 中:此时只要 BIGINT UNSIGNED
列对应的 field 是 uint64
类型,可以正常读进去map[string]interface{}
;如果:int64
范围时,GORM 会报错;这个问题可以用我维护的 fork 解决uint64
值老版本(v1.21.15)GORM 的支持更差些。比如 db.ScanRows()
处理不了大于 int64 范围的整数:
converting driver.Value type []uint8 ("9223372036854775809") to a int64: value out of range
但是 db.Find()
却可以。后面作者 fix 了这个问题。