我有一个简单的用户表'userid'和'username'字段。请检查以下命令:
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)
答案 1 :(得分:0)
这里的问题是MySQL在进行比较时正在从字符串到int进行隐式转换。例如:
SELECT * FROM cloths WHERE id = "5 shiv"
使转换显式化,这就是MySQL正在做的事情:
SELECT * FROM cloths WHERE id = CAST("5 shiv" as int)
相反,您要做的是将id转换为字符串,然后进行比较。解决方案只是:
SELECT * FROM cloths WHERE CAST (id as varchar(10)) = "5 shiv"
您也可以通过参考链接查看: Doc link