CakePHP/MySQL: Want a Boolean? Use TINYINT(1), not BIT(1)

I was recently creating some new MySQL tables that stored booleans, so I thought I would do things (what I presumed to be) properly and make them BIT(1) columns, rather than TINYINT(1). However, when I came to try to save values to this field using CakePHP, everything was saved as 1, even if the value in the data array was 0, false, “”, “0” or anything else ‘zero-ey’ or ‘falsey’.

It turns out that BIT fields are not supported by Cake, and so you should just use TINYINT(1) instead!

Furthermore, Cake will assume a TINYINT(1) field is intended as a boolean field, and will only allow you to assign it a value of 0 or 1, even though TINYINT(1) can store values from -128 to 127 (or 0 to 255 unsigned). If you try to save any value other than 0 or 1 to this field, it will be saved as 1 (but note that false, “” and an empty array will cause a save error).

3 Replies to “CakePHP/MySQL: Want a Boolean? Use TINYINT(1), not BIT(1)”

    1. Hello Euromarco, but beware, the issue with CakePHP 2.x, etc., is with MySQL 8.x where TINYINT is no longer limited. It ignores TINYINT(1), always having a maximum length of 3.

  1. Hello Euromarco, but beware, the issue with CakePHP 2.x, etc., is with MySQL 8.x where TINYINT is no longer limited. It ignores TINYINT(1), always having a maximum length of 3.

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.