При выполнении запроса SELECT
и сохранении результатов в структуре с полем типа interface
результирующий тип отличается от int64
до []uint8
в зависимости от того, является ли используемая мной база данных базой данных MySQL., или MariaDB.
Это связано с предыдущим вопросом, который я задал (и получил ответ): Несоответствие SQL-запроса Go
При заданном интерфейсе:
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)
Запрос, который я хотел бы выполнить:
ВЫБРАТЬ A, B, C, D ИЗ таблицы, ГДЕ A= "a"
Как это выполняется:
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
}
Я использую https://github.com/jmoiron/sqlx