When executing a SELECT
query, and storing the results in a struct with a field of type interface
, the resulting type differs between int64
and []uint8
depending if the db I am using is a MySQL database, or MariaDB.
This is related to a previous question that I had asked (and was answered) : Go SQL query inconsistency
Given an interface as follows:
type Result struct {
Afield string `db:"A"`
Bfield interface{} `db:"B"`
Cfield string `db:"C"`
Dfield string `db:"D"`
}
And database table:
A : VARCHAR(50)
B : INT
C : VARCHAR(50)
D : VARCHAR(50)
The query I would like to execute:
SELECT A, B, C, D FROM table WHERE A="a"
How it is being executed:
db.Get(&result, `SELECT A, B, C, D FROM table WHERE A=?`, "a")
The issue
If being executed on a MySQL database, the type of Bfield
is int64
(desired), However if being executed on MariaDB, the type is instead []uint8
.
Why is the type of Bfield different, depening on if the query is executed on a MySQL db or MariaDB?
Potentially useful info:
db is of type: *sqlx.DB
, then passed to function that executes the query, where db is type 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
}
I am using https://github.com/jmoiron/sqlx