Поскольку MySQL (8.0.16) и MariaDB (10.2.1) реализовали ограничение CHECK, я бы теперь использовал
bool_val TINYINT CHECK(bool_val IN(0,1))
Вы сможете хранить только 0
, 1
или NULL
, а также значения, которые можно преобразовать в 0
или 1
без ошибок, таких как '1'
, 0x00
, b'1'
или TRUE
/ FALSE
.
Если вы не хотите разрешать NULL, добавьте параметр NOT NULL
bool_val TINYINT NOT NULL CHECK(bool_val IN(0,1))
Обратите внимание, что разницы практически нет, если вы используете TINYINT
, TINYINT(1)
или TINYINT(123)
.
Если вы хотите, чтобы ваша схема была совместимой вверх, вы также можете использовать BOOL
или BOOLEAN
bool_val BOOL CHECK(bool_val IN(TRUE,FALSE))
db <> fiddle demo