PDA

Просмотр полной версии : Не нашел в манах MySQL ничего


user6334
17.03.2016, 11:07
Не могу объяснить следующий корректный запрос:


Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''

Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?

BabaDook
17.03.2016, 13:07
user6334 said:
↑ (https://antichat.live/posts/3963985/)
Не могу объяснить следующий корректный запрос:

Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''

Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?


Пробел

Waki
17.03.2016, 13:14
user6334 said:
↑ (https://antichat.live/posts/3963985/)
Не могу объяснить следующий корректный запрос:

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

user6334
17.03.2016, 13:49
BabaDook said:
↑ (https://antichat.live/posts/3964012/)
Пробел


Заменяем + на пробел, получаем:


Code:
SELECT * FROM `users` WHERE login = 'blablabla' ''

На выводе ничего. Значит не пробел.

user6334
17.03.2016, 13:57
Waki said:
↑ (https://antichat.live/posts/3964018/)
такой запрос эквивалент запросу

Code:
SELECT * FROM `users` WHERE login = 0

+ в мускле оператор сложения
зы. плохо искал кстати,
http://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html


Про оператор сложения, это и так понятно )

Но, как понять login = 0 учитывая, что login имя пользователя, т.е. строчный тип

И почему запрос


Code:
SELECT * FROM `users` WHERE login = 0

возвращает всю таблицу, тогда как запрос


Code:
SELECT * FROM `users` WHERE login = 1

не возвращает ничего?

Waki
17.03.2016, 14:05
user6334 said:
↑ (https://antichat.live/posts/3964033/)
Про оператор сложения, это и так понятно )
Но, как понять login = 0 учитывая, что login имя пользователя, т.е. строчный тип


поле login преобразуется в integer, а там большинство строк будут равны 0

user6334
17.03.2016, 14:29
Waki said:
↑ (https://antichat.live/posts/3964042/)
поле login преобразуется в integer, а там большинство строк будут равны 0


С преобразованиями типов кажется разобрался ) Но так и не понял, почему запрос


Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''

или


Code:
SELECT * FROM `users` WHERE login = 'blablabla' + 'bebebe'

будет эквивалентен запросу


Code:
SELECT * FROM `users` WHERE login = 0

?

Может это из-за того, что знак плюс является арифметическим оператором, значит все, что он складывает приводиться к числовому типу?

Alex_gan
17.03.2016, 15:33
Правая часть из за сложения конвертирует оба слагаемых в цифры. Затем левую часть тоже пытается привести к числовому типу. Странно что при этом выдает результат, а не ошибку.

Оракл на такой же запрос ругается на несоответсвие типов и это логично.

user6334
17.03.2016, 16:05
Alex_gan said:
↑ (https://antichat.live/posts/3964078/)
Правая часть из за сложения конвертирует оба слагаемых в цифры. Затем левую часть тоже пытается привести к числовому типу. Странно что при этом выдает результат, а не ошибку.
Оракл на такой же запрос ругается на несоответсвие типов и это логично.


В Оракл и MYSQL знак плюс используется кроме арифметического сложения еще и для конкатенации строк

Alex_gan
17.03.2016, 16:20
На счет мускула не скажу, а вот в Оракле конкатенация строк это ||. Если + когда то и использовался для этого то в каких то совсем уж древнючих версиях.

user6334
17.03.2016, 16:51
Alex_gan said:
↑ (https://antichat.live/posts/3964102/)
На счет мускула не скажу, а вот в Оракле конкатенация строк это ||. Если + когда то и использовался для этого то в каких то совсем уж древнючих версиях.


Да, можно было использовать оба варианта, или 2 палки или +. Возможно, плюс уже канул в прошлое, я не проверял