Почему одинарные кавычки в этом запросе SQL влияют на вычисления? - PullRequest
4 голосов
/ 29 января 2011
SELECT COUNT(*) FROM planets
WHERE ROUND(SQRT(POWER(('71' - coords_x), 2) +
                 POWER(('97' - coords_y), 2))) <= 17

==> 51

SELECT COUNT(*) FROM planets
WHERE ROUND(SQRT(POWER((71 - coords_x), 2) +
                 POWER((97 - coords_y), 2))) <= 17

==> 22 * ​​1005 *

coords_x и coords_y - оба поля TINYINT, содержащие значения в диапазоне [1, 100],Обычно MySQL не волнует, указаны ли числа в кавычках или нет .. но, очевидно, в этом случае это так.Вопрос: почему?

Ответы [ 2 ]

4 голосов
/ 29 января 2011

Я немного заржавел в инердах MySql, но <= в строке переходит к лексикографической сортировке вместо числовых, т. Е. '150' < '17'.

2 голосов
/ 29 января 2011

Неявное преобразование из строки в число с плавающей запятой, вероятно, приводит к неточным результатам.См .: Преобразование типов в оценке выражений

...