Mysql SQL,其中与数字和字符串进行比较

Mysql SQL,其中与数字和字符串进行比较,mysql,sql,string,integer,Mysql,Sql,String,Integer,我发现,如果我在int列上使用WHERE,但将我的条件作为数字和字符串,行仍然返回 SELECT * FROM articles where post_id = '1-hey'; 以上是一个很好的例子。但这篇文章为什么会被退回呢?我应该做些保护吗?我不明白为什么返回post_id为1的行。我猜您在这里使用的是MySQL,它有一些相当复杂的强制转换规则,涵盖了在查询的where子句中发生的隐式强制转换。在MySQL中,如果将LHS上的整数列与RHS上的字符串进行比较,则有一条规则规定将从字符串中

我发现,如果我在int列上使用WHERE,但将我的条件作为数字和字符串,行仍然返回

SELECT * FROM articles where post_id = '1-hey';

以上是一个很好的例子。但这篇文章为什么会被退回呢?我应该做些保护吗?我不明白为什么返回post_id为1的行。

我猜您在这里使用的是MySQL,它有一些相当复杂的强制转换规则,涵盖了在查询的
where
子句中发生的隐式强制转换。在MySQL中,如果将LHS上的整数列与RHS上的字符串进行比较,则有一条规则规定将从字符串中保留尽可能多的字符,例如可以形成整数的字符。或者,更简单地说,MySQL将从字符串开始查找数字。仅查找
1
,然后将其与此值进行比较。因此,正在执行的实际查询如下所示:

SELECT * FROM articles where post_id = '1-hey';
SELECT * FROM articles where post_id = 1;

最好的做法是不要尝试这样做。在大多数其他数据库上,您的查询甚至无法编译。如果你真的需要做这个比较,那么要么考虑制作<代码> PistyID文本,要么只与纯整数进行比较。< /P>你使用MySQL吗?如果是这样,那么请添加适当的标签。谢谢。是的,我根本不尝试这个查询。我从URL中清理ID并确保它是一个数字。就在另一次手动测试中,我注意到如果我添加一个字母,它仍然会抓住它。我只是好奇为什么,谢谢!