В каких случаях вы бы использовали какие? Есть большая разница? Что я обычно использовал в механизмах сохранения логических значений для хранения логических значений?
106
TINYINT - это 8-битное целочисленное значение, в поле BIT может храниться от 1 бит, BIT (1), до 64 бит, BIT (64). Для логических значений довольно часто используется BIT (1).
Из обзора числовых типов ;
BIT [(M)]
TINYINT [(M)] [НЕ ПОДПИСАНО] [ZEROFILL]
Дополнительно учтите это;
BOOL, BOOLEAN
источник
boolean
это займет байт, хотя на самом деле его совсем немного, поэтому BIT (1) лучше после v5.0.3?BOOL
/BOOLEAN
являются псевдонимами дляTINYINT(1)
вместоBIT
. Конечно, все они в конечном итоге занимают целый байт, но семантическиBIT
было бы гораздо более подходящим.Все эти теоретические обсуждения прекрасны, но на самом деле, по крайней мере, если вы используете MySQL и действительно для SQLServer, лучше придерживаться небинарных данных для ваших логических значений по той простой причине, что с ними легче работать, когда вы выводим данные, запрашиваем и так далее. Это особенно важно, если вы пытаетесь добиться взаимодействия между MySQL и SQLServer (т. Е. Вы синхронизируете данные между ними), потому что обработка типа данных BIT отличается в обоих из них. Так что на практике у вас будет намного меньше проблем, если вы будете придерживаться числового типа данных. Я бы порекомендовал MySQL придерживаться BOOL или BOOLEAN, которые сохраняются как TINYINT (1). Даже то, как MySQL Workbench и MySQL Administrator отображают тип данных BIT, нехорошо (это небольшой символ для двоичных данных).
источник
BIT должен разрешать только 0 и 1 (и NULL, если поле не определено как NOT NULL). TINYINT (1) допускает любое значение, которое может быть сохранено в одном байте, -128..127 или 0..255 в зависимости от того, беззнаковое оно или нет (1 показывает, что вы собираетесь использовать только одну цифру, но это не мешает вам хранить большее значение).
Для версий старше 5.0.3 BIT интерпретируется как TINYINT (1), поэтому здесь нет никакой разницы.
BIT имеет семантику «это логическое», и некоторые приложения будут рассматривать TINYINT (1) таким же образом (из-за того, как MySQL обрабатывает его), поэтому приложения могут форматировать столбец как флажок, если они проверяют тип и выберите формат на основе этого.
источник
Может ошибаться, но:
Tinyint - это целое число от 0 до 255.
бит равен 1 или 0
Поэтому для меня бит - это выбор для логических значений
источник
По своему опыту я говорю вам, что у BIT есть проблемы с типами ОС Linux (например, Ubuntu). Я разработал свою базу данных для Windows, и после того, как я развернул все на Linux, у меня возникли проблемы с запросами, которые вставлялись или выбирались из таблиц с BIT DATA TYPE.
Бит пока небезопасен. Я перешел на tinyint (1) и работал отлично. Я имею в виду, что вам нужно только значение для дифференциации, если оно 1 или 0, а tinyint (1) для этого подходит
источник