Where子句返回所有行的假值?

时间:2011-05-23 14:51:07

标签: mysql where-clause

我有一个如下所示的查询:

`SELECT id, username FROM table_name WHERE username=0`

当我运行此查询时,MySQL返回table_name中的所有行。另外,如果我将0替换为false,我会得到相同的结果。如果我使用null或空字符串,那么我没有返回任何行(如预期的那样)。

用户名列是varchar(50),如果它有所不同。

我的问题是

为什么在该查询中输入0或false会返回表中的所有行?这是一个MySQL设置吗?

这让我有点担心,因为我一直在假设上面的查询没有返回任何行(在这种特殊情况下),我想知道这是否会在我的应用程序的其他地方发生,以及它可能带来的意外后果。 / p>

1 个答案:

答案 0 :(得分:5)

用户名被转换为int为0以进行比较。 0 = 0的计算结果为true,所以就像这里没有WHERE子句一样。如果您尝试获取非空的空白用户名,则可以使用username=''