我有一个简单的表users,带有'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本身的问题?
发布于 2015-07-07 18:23:24
这里的问题是,在执行比较时,MySQL正在执行从字符串到整型的隐式转换。例如:
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
https://stackoverflow.com/questions/31265630
复制相似问题