False value in Where Clause Returns All Rows?
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.
精彩评论