MySQL: “= true” vs “is true” on BOOLEAN. When is it advisable to use which one? And Which one is vendor independent?

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 and FALSE 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 or 1 in BOOLEAN

My conclusion would be:

  • You’ll have to use WHERE IS flag or just WHERE 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.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)