Задать вопрос
Driver86
@Driver86
Немодератор toster.ru

Вычитание столбцов приводит к ошибке «Numeric value out of range», но не всё так просто?

SELECT (`likes` - `dislikes`) AS `rating` FROM `article`

Этот запрос возвращает возвращает ошибку, если `likes` и/или `dislikes` - unsigned:
SQLSTATE[22003]: Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range

Почему? `rating` автоматически приводится к типу unsigned? Или что?

Уточню, что все значения не превышают рамки INTEGER: −2 147 483 648 до 2 147 483 647
  • Вопрос задан
  • 2561 просмотр
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Driver86
@Driver86 Автор вопроса
Немодератор toster.ru
Короче, как я и думал :)
www.mysql.ru/docs/man/Column_types.html
Предупреждение: следует помнить, что при выполнении вычитания между числовыми величинами, одна из которых относится к типу UNSIGNED, результат будет беззнаковым!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mletov
Посмоторите значения в таблице для likes, dislikes и их разницы. А так же допустимые значения для INT, BIGINT или какой тип им там назначен.

https://dev.mysql.com/doc/refman/5.5/en/integer-ty...

Может у вас разница меньше, чем -2147483648 (INT) | -9223372036854775808 (BIGINT)
или больше чем 2147483647(INT) | 9223372036854775807(BIGINT)

stackoverflow.com/questions/11698613/bigint-unsign...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы