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).
thats why you use tinyint(2) for non-boolean enum-like fields instead.
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.
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.