开发者

False value in Where Clause Returns All Rows?

开发者 https://www.devze.com 2023-03-08 00:36 出处:网络
I have a query that looks like this: `SELECT id, username FROM table_na开发者_运维百科me WHERE username=0`

I have a query that looks like this:

`SELECT id, username FROM table_na开发者_运维百科me WHERE username=0`

When I run this query MySQL returns all rows in table_name. Additionally, if I substitute 0 for false I get the same results. If I use null or an empty string then I get no rows returned (as expected).

The username column is varchar(50) if it makes a difference.

My question then is this:

Why does putting 0 or false in that query return all rows in the table? Is this a MySQL setting?

This worries me a little as I've been operating under the assumption that the above query would return no rows (in this particular case) and I wonder if this happening elsewhere in my application and what unintended consequences it might have.


username is being cast to an int of 0 to make the comparsion. 0=0 evaluates to true, so it's like there's no WHERE clause at all here. You could use username='' if you're trying to get a non-null blank username.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号