В каких случаях вы бы использовали какие? Есть большая разница? Что я обычно использовал в механизмах сохранения логических значений для хранения логических значений?
В каких случаях вы бы использовали какие? Есть большая разница? Что я обычно использовал в механизмах сохранения логических значений для хранения логических значений?
Ответы:
TINYINT - это 8-битное целочисленное значение, в поле BIT может храниться от 1 бит, BIT (1), до 64 бит, BIT (64). Для логических значений довольно часто используется BIT (1).
BIT [(M)]
Тип битового поля. M указывает количество бит на значение от 1 до 64. По умолчанию - 1, если M опущено.
Этот тип данных был добавлен в MySQL 5.0.3 для MyISAM и расширен в 5.0.5 на MEMORY, InnoDB, BDB и NDBCLUSTER. До 5.0.3 BIT был синонимом TINYINT (1).
TINYINT [(M)] [НЕ ПОДПИСАНО] [ZEROFILL]
Очень маленькое целое число. Диапазон со знаком - от -128 до 127. Диапазон без знака - от 0 до 255.
Дополнительно учтите это;
BOOL, BOOLEAN
Эти типы являются синонимами TINYINT (1). Нулевое значение считается ложным. Ненулевые значения считаются истинными.
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) для этого подходит