Не могу объяснить следующий корректный запрос: Code: SELECT * FROM `users` WHERE login = 'blablabla' + '' Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?
такой запрос эквивалент запросу Code: SELECT * FROM `users` WHERE login = 0 + в мускле оператор сложения зы. плохо искал кстати, http://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html
Заменяем + на пробел, получаем: Code: SELECT * FROM `users` WHERE login = 'blablabla' '' На выводе ничего. Значит не пробел.
Про оператор сложения, это и так понятно ) Но, как понять login = 0 учитывая, что login имя пользователя, т.е. строчный тип И почему запрос Code: SELECT * FROM `users` WHERE login = 0 возвращает всю таблицу, тогда как запрос Code: SELECT * FROM `users` WHERE login = 1 не возвращает ничего?
С преобразованиями типов кажется разобрался ) Но так и не понял, почему запрос Code: SELECT * FROM `users` WHERE login = 'blablabla' + '' или Code: SELECT * FROM `users` WHERE login = 'blablabla' + 'bebebe' будет эквивалентен запросу Code: SELECT * FROM `users` WHERE login = 0 ? Может это из-за того, что знак плюс является арифметическим оператором, значит все, что он складывает приводиться к числовому типу?
Правая часть из за сложения конвертирует оба слагаемых в цифры. Затем левую часть тоже пытается привести к числовому типу. Странно что при этом выдает результат, а не ошибку. Оракл на такой же запрос ругается на несоответсвие типов и это логично.
На счет мускула не скажу, а вот в Оракле конкатенация строк это ||. Если + когда то и использовался для этого то в каких то совсем уж древнючих версиях.
Да, можно было использовать оба варианта, или 2 палки или +. Возможно, плюс уже канул в прошлое, я не проверял