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

217
26 ноября 2016, 20:10

Запрос 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

Почему так?

Answer 1

Вы сравниваете числовое поле с строковым. В этом случае MySQL преобразует строку в число. А при преобразовании строки в число MySQL старается это число составить из всех десятичных цифр с начала строки до первой не цифры. Таким образом при приведении к числу строка 65a... превращается в число 65.

Проверяется явным приведением типов:

select cast('65abc' as unsigned), cast('abc65' as unsigned)
Результат: 65, 0
READ ALSO
Условие на подсчет limit

Условие на подсчет limit

Имеется столбец вида

284
Получение данных из внешней базы в Rails №2

Получение данных из внешней базы в Rails №2

По ссылке уже задавал вопросВсе получилось, но

244
Прогресс выполнения запроса в MySQL

Прогресс выполнения запроса в MySQL

Существует ли возможность в MySQL получить информацию о прогрессе выполнения длительного запроса? Интересна информация о том, сколько осталось...

233