执行SELECT
查询并将结果存储在字段类型为interface
的结构中时,int64
和[]uint8
之间的结果类型有所不同,具体取决于我正在使用的db是MySQL数据库或MariaDB。
这与我曾问过(并且已回答)的上一个问题有关:Go SQL query inconsistency
给出如下界面:
type Result struct {
Afield string `db:"A"`
Bfield interface{} `db:"B"`
Cfield string `db:"C"`
Dfield string `db:"D"`
}
和数据库表:
A : VARCHAR(50)
B : INT
C : VARCHAR(50)
D : VARCHAR(50)
我要执行的查询:
从表WHERE A =“ a”
中选择A,B,C,D
它的执行方式:
db.Get(&result, `SELECT A, B, C, D FROM table WHERE A=?`, "a")
问题
如果在MySQL数据库上执行,则Bfield
的类型为int64
(期望),但是,如果在MariaDB上执行,则类型为[]uint8
。
Bfield的类型为何不同,取决于查询是在MySQL数据库还是MariaDB上执行?
可能有用的信息:
db的类型为*sqlx.DB
,然后传递给执行查询的函数,其中db的类型为Connection
。
// Connection is an interface for making queries.
type Connection interface {
Exec(query string, args ...interface{}) (sql.Result, error)
Get(dest interface{}, query string, args ...interface{}) error
Select(dest interface{}, query string, args ...interface{}) error
}