Из руководства MySQL говорится:
BOOL, BOOLEAN
Эти типы являются синонимами для TINYINT (1). Нулевое значение считается ложным. Ненулевые значения считаются истинными:
Я создал столбец BOOLEAN со 0
значением по умолчанию. Затем я обновляю значение до 2
. Логически, я ожидал бы, что MySQL примет или 0
или, 1
так как это логическое значение. Однако MySQL не выдавал ошибку и не мешал мне выполнить обновление.
Если BOOLEAN работает точно так же, как TINYINT (1), имеет ли какое-то значение, использую ли я TINYINT (1) или BOOLEAN?
BIT
это действительно битовое поле, которое компактно содержит от одного до шестидесяти четырех бит.Если вы работаете с другими людьми (или хотите напомнить себе), вы можете использовать тип данных,
BOOLEAN
чтобы предположить, что данные предназначены только для принятия значения 1 или 0.источник
Мне кажется, что разница действительно есть.
В таблице, которую я использую, у меня есть столбец, определенный как tinyint с индексом для столбца. Когда я вызываю следующий запрос «объяснение выбора * из таблицы, где столбец имеет значение true», это указывает, что он собирается прочитать все строки в таблице (столбцы «возможные_ключи» и «ref» равны нулю, несмотря на то, что столбец «ключ» показывает показатель).
Изменив запрос на «объяснение select * из таблицы, где column = 1» индекс корректно включается, при этом столбцам «возможные ключи» и «ref» присваиваются значения, а для «строк» устанавливается намного меньшее число.
Я также попытался заменить «true» на «false», а 1 на 0 и получить сопоставимые результаты.
Сделав шаг вперед, я переключился с tinyint на int, и это не имело никакого значения.
источник