Разница в MySQL и MariaDB SELECT возвращает тип - PullRequest
0 голосов
/ 04 марта 2019

При выполнении запроса 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

...