Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Почему (65='65ae3ee2-aeb2-427f-8381-56db91b94363') -> TRUE?

#mysql


Запрос SELECT * FROM families WHERE id = '65ae3ee2-aeb2-427f-8381-56db91b94363' OR
fam_code = '65ae3ee2-aeb2-427f-8381-56db91b94363' возвращает две записи:

id fam_code

65 c648b66e-ae0c-467b-af56-1e6d3c214f2e

92 65ae3ee2-aeb2-427f-8381-56db91b94363


Почему так?
    


Ответы

Ответ 1



Вы сравниваете числовое поле с строковым. В этом случае MySQL преобразует строку в число. А при преобразовании строки в число MySQL старается это число составить из всех десятичных цифр с начала строки до первой не цифры. Таким образом при приведении к числу строка 65a... превращается в число 65. Проверяется явным приведением типов: select cast('65abc' as unsigned), cast('abc65' as unsigned) Результат: 65, 0

Комментариев нет:

Отправить комментарий