MySQL is actually fooling you. It doesn’t have a boolean column type at all:
BOOL
,BOOLEAN
These types are synonyms for
TINYINT(1)
. A value of zero is considered
false. Nonzero values are considered true:
Also, the boolean literals are not such:
The constants
TRUE
andFALSE
evaluate to 1 and 0, respectively.
Considering that:
- Many database systems do not have booleans either (not at least in standard SQL and column types)
- MySQL doesn’t have an easy way to enforce
0
or1
inBOOLEAN
My conclusion would be:
- You’ll have to use
WHERE IS flag
or justWHERE flag
because=
simply doesn’t work correctly. Which one, is possibly a matter of preference. - Whatever you choose, no option will be vendor independent. For instance, Oracle won’t even run either of them.
Edit: if cross-platform is a must, I’d go for this:
WHERE flag=0
WHERE flag<>0
I’m sure we’ve all done it lots of times.