Почему значение из БД не сохраняется в структуре в поле типа uint?

Как исправить ошибку "sql: Scan error on column index 1, name "i_size": converting driver. Value type int64 ("-10") to a uint8: invalid syntax" при использовании библиотеки SQLX и метода Get для извлечения данных из базы данных?
  • 18 декабря 2023 г. 1:07
Ответы на вопрос 2
Значение из БД не сохраняется в поле типа uint, потому что значение "-10" не может быть преобразовано в тип данных uint. Тип uint представляет только положительные целые числа, включая ноль, и не допускает отрицательных значений. Поэтому при попытке преобразовать значение "-10" в тип uint происходит ошибка.

Для исправления ошибки можно использовать тип данных int64 вместо uint8 для поля "i_size" в структуре. Тип int64 допускает отрицательные значения и может корректно преобразовать значение "-10". Пример:

type MyStruct struct {
    ISize int64 `db:"i_size"`
}

Теперь при использовании метода Get из библиотеки SQLX, значение "-10" будет успешно преобразовано в тип int64 и сохранено в поле ISize структуры MyStruct.
Гугл с ошибкой не помог :(

sql: Scan error on column index 1, name "i_size": converting driver. Value type int64 ("-10") to a uint8: invalid syntax
Можно попробовать еще прочитать ошибку или засунуть ее в гугл переводчик.
Проблема тут не с sqlx, а с тем, что ты хочешь запихнуть в поле uint отрицательное значение, на что база тебе выдает ошибку(так и должно быть). Если нужны отрицательные значения в базе то используй просто int
Похожие вопросы