2015-07-07 2 views
-1

У меня есть простые пользователи таблицы с полями «userid» и «username». Пожалуйста, проверьте команды следующим образом:MySQL возвращает неверные результаты поиска по id

Select * from users where userid = '5'; --returns me 1 result - Right 

Select * from users where userid = '5 shiv'; --returns me 1 result - Wrong 

Почему второй запрос по-прежнему возвращает мне один результат. В чем может быть проблема? проблема с движком или MySQL?

+0

поделитесь табличными данными и результатами. –

+0

Это простая таблица с настройкой «latin1_swedish_ci» – dirtyhandsphp

+0

Возможный дубликат: http://stackoverflow.com/questions/21762075/mysql-automatically-cast-convert-a-string-to-a-number –

ответ

0

Проблема заключается в том, что MySQL выполняет неявное преобразование из строки в int при сравнении. Например:

SELECT * FROM cloths WHERE id = "5 shiv" 

делает преобразование явной, это то, что делает MySQL:

SELECT * FROM cloths WHERE id = CAST("5 shiv" as int) 

Вместо того, что вы хотите сделать, это бросить идентификатор в строку, и сравнить этот путь. Решение просто:

SELECT * FROM cloths WHERE CAST (id as varchar(10)) = "5 shiv" 

Вы также можете проверить, обратитесь по ссылке: Doc link

+0

почему 2 ответа? И почему вы копируете «как есть» из ссылки? –

+1

, чтобы пользователь мог лучше понять –

+0

Если вы хотите скопировать ответ ** «Как это» **, просто укажите ссылку в комментарии прямо под вопросом, поскольку вы не добавляете ничего еще в ответ Readymade. –

0

'5 shiv' оценивает 5 и пропускает вашу часть строки после ой у вас есть запись с идентификатором пользователем, как 5.

Edit: Cast вашего выражения в VARCHAR

Select * from users where CAST (userid as varchar(10)) = '5 shiv'; 

Refer here for more

+0

Этого не должно быть .... так это поведение mysql? – dirtyhandsphp

+0

Можете ли вы расширить и объяснить, почему это будет вести себя так? И в идеале предоставить ссылку? –

+0

@ X.L.Ant, да, объяснено, check edit –

Смежные вопросы