В чем преимущество использования BOOLEAN перед TINYINT (1)?


16

Из руководства MySQL говорится:

BOOL, BOOLEAN

Эти типы являются синонимами для TINYINT (1). Нулевое значение считается ложным. Ненулевые значения считаются истинными:

Я создал столбец BOOLEAN со 0значением по умолчанию. Затем я обновляю значение до 2. Логически, я ожидал бы, что MySQL примет или 0или, 1так как это логическое значение. Однако MySQL не выдавал ошибку и не мешал мне выполнить обновление.

Если BOOLEAN работает точно так же, как TINYINT (1), имеет ли какое-то значение, использую ли я TINYINT (1) или BOOLEAN?

Ответы:


11

Эти два действительно синонимы, так что вы можете использовать их взаимозаменяемо. Вы не увидите никакой разницы между ними.

Если вы хотите разрешить только 0 и 1, вы все равно можете использовать bitтип.


1
@QuestionOverflow Имейте в виду, что BITэто действительно битовое поле, которое компактно содержит от одного до шестидесяти четырех бит.
Дэвид Харкнесс

2

Если вы работаете с другими людьми (или хотите напомнить себе), вы можете использовать тип данных, BOOLEANчтобы предположить, что данные предназначены только для принятия значения 1 или 0.


0

Мне кажется, что разница действительно есть.

В таблице, которую я использую, у меня есть столбец, определенный как tinyint с индексом для столбца. Когда я вызываю следующий запрос «объяснение выбора * из таблицы, где столбец имеет значение true», это указывает, что он собирается прочитать все строки в таблице (столбцы «возможные_ключи» и «ref» равны нулю, несмотря на то, что столбец «ключ» показывает показатель).

Изменив запрос на «объяснение select * из таблицы, где column = 1» индекс корректно включается, при этом столбцам «возможные ключи» и «ref» присваиваются значения, а для «строк» ​​устанавливается намного меньшее число.

Я также попытался заменить «true» на «false», а 1 на 0 и получить сопоставимые результаты.

Сделав шаг вперед, я переключился с tinyint на int, и это не имело никакого значения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.