The BIT(1)
field type is attractive as it only allows 0 or 1 in the database itself. The solutions that suggest TINYINT
will allow values from -127
to 128
or 0
to 255
if unsigned. Indeed Laravel struggles with the data truncation error if sending a 0
or a 1
, but, it's not Laravel's fault. The fault lies in PHP's PDO bindings. Here's a discussion about it.
PDOstatement (MySQL): inserting value 0 into a bit(1) field results in 1 written in table
Sadly the recommendation is to use TINYINT
for the field value to avoid the data truncation error. I want to be clear for the sake of others reading about this that of course you can write code to handle this (converting true/false to 0, 1, etc.), but that will never protect you from someone making changes directly to the database. You should assume that is a possibility and design your schema accordingly, which is why the BIT(1)
field type is attractive.