Странное поведение ответа с помощью SELECT - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть простая таблица, использующая non auto inc INT в качестве первичного ключа.При запросе к таблице с условием, например, WHERE id = '2,5,6' (непреднамеренно!), Он возвращает набор результатов!Хорошо, работает, но почему?

1 Ответ

0 голосов
/ 11 декабря 2018

id - это целое число, и вы сравниваете его со строкой '2,5,6'.MySQL преобразует строку в число, чтобы сравнить их.

Ну, '2,5,6' не число, и другие СУБД выдают ошибку.Но MySQL использует другой подход: он преобразует символ на символ, пока строка не закончится или символ не будет числовым.Таким образом, он видит 2, а затем запятую.В зависимости от ваших настроек запятая является десятичным разделителем или нет.Таким образом, MySQL либо преобразуется в 2, либо в 2,5.

Вот документация по неявным преобразованиям в MySQL: https://dev.mysql.com/doc/refman/5.5/en/type-conversion.html.

Алгоритм преобразования строки в число явно не описан.там, но они говорят, например,

есть много разных строк, которые могут преобразовать в значение 1, например, «1», «1» или «1a».

Они также указывают в этом документе, что неявное преобразование опасно, поскольку строки преобразуются не в DECIMAL (как я бы подумал), а в приблизительный тип данных DOUBLE.Так что в MySQL всегда следует избегать неявного преобразования строки в число .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...