我有一个如下所示的查询:
`SELECT id, username FROM table_name WHERE username=0`
当我运行此查询时,MySQL返回table_name中的所有行。另外,如果我将0替换为false,我会得到相同的结果。如果我使用null或空字符串,那么我没有返回任何行(如预期的那样)。
用户名列是varchar(50),如果它有所不同。
我的问题是:
为什么在该查询中输入0或false会返回表中的所有行?这是一个MySQL设置吗?
这让我有点担心,因为我一直在假设上面的查询没有返回任何行(在这种特殊情况下),我想知道这是否会在我的应用程序的其他地方发生,以及它可能带来的意外后果。 / p>
答案 0 :(得分:5)
用户名被转换为int为0以进行比较。 0 = 0的计算结果为true,所以就像这里没有WHERE子句一样。如果您尝试获取非空的空白用户名,则可以使用username=''
。