Числовое значение вне диапазона: 1690 BIGINT UNSIGNED значение находится вне диапазона в - PullRequest
1 голос
/ 17 апреля 2019

У меня есть запрос:

update `shops` set
    `points` = `points` - 2,
    `updated_at` = '2019-04-17 23:07:11'
where `id` = 4;

Точки столбцов имеют тип столбца: BIGINT (20).

Теперь в записи у меня есть значение 62. Когда я запускаю вышеуказанный запрос, яполучить эту ошибку:

SQLSTATE [22003]: числовое значение вне диапазона: 1690 BIGINT UNSIGNED значение находится вне диапазона в '(`database` .shops`.`points` - 2)'

отличается.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Нельзя хранить отрицательные значения в целых числах без знака.Более безопасным решением является проверка операндов перед выполнением вычитания:

SET points = CASE WHEN points >= 2 THEN points - 2 ELSE 0 END

Или просто:

SET points = points - LEAST(points, 2)
0 голосов
/ 17 апреля 2019

это будет работать:

 set `points` = `points` - cast(2 AS SIGNED)

и

`updated_at` = '2019-04-17 23:07:11'
...