В чем разница между BIT и TINYINT в MySQL?


в каких случаях вы бы использовали что? Есть ли большая разница? Который я обычно использую движками персистентности для хранения логических значений?

6 87

6 ответов:

TINYINT-это 8-битное целое значение, битовое поле может хранить между 1 бит, бит(1) и 64 бит, бит(64). Для логических значений бит (1) довольно распространен.

с обзор числовых типов;

БИТ [(M)]

тип битового поля. M указывает на количество бит на значение от 1 до 64. Значение по умолчанию равно 1, если M опущено.

этот тип данных был добавлен в MySQL 5.0.3 для MyISAM и расширен в 5.0.5 до памяти, InnoDB, BDB и NDBCLUSTER. До 5.0.3 бит-это a синоним TINYINT (1).

TINYINT [(M)] [БЕЗ ЗНАКА] [ZEROFILL]

очень маленькое число. Подписанный диапазон от -128 до 127. Диапазон без знака: 0 до 255.

дополнительно учесть это;

BOOL, BOOLEAN

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

все эти теоретические обсуждения великолепны, но на самом деле, по крайней мере, если вы используете MySQL и действительно для SQLServer, лучше всего придерживаться недвоичных данных для ваших логических значений по той простой причине, что с ними легче работать, когда вы выводите данные, запрашиваете и так далее. Это особенно важно, если вы пытаетесь достичь взаимодействия между MySQL и SQLServer (т. е. вы синхронизируете данные между ними), потому что обработка битового типа данных отличается в двух из них. Так что на практике у вас будет гораздо меньше проблем, если вы будете придерживаться числового типа данных. Я бы рекомендовал для MySQL придерживаться BOOL или BOOLEAN, который хранится как TINYINT(1). Даже то, как MySQL Workbench и MySQL Administrator отображают битовый тип данных, не очень приятно (это маленький символ для двоичных данных). Так что будьте практичны и избавьте себя от неприятностей (и, к сожалению, я говорю из опыта).

бит должен разрешать только 0 и 1 (и NULL, если поле не определено как NOT NULL). TINYINT (1) позволяет любое значение, которое может быть сохранено в одном байте, -128..127 или 0..255 в зависимости от того, является ли он беззнаковым (1 показывает, что вы собираетесь использовать только одну цифру, но это не мешает вам хранить большее значение).

для версий старше 5.0.3 бит интерпретируется как TINYINT(1), поэтому есть нет разница есть.

бит имеет "это является логической " семантикой, и некоторые приложения будут рассматривать TINYINT(1) таким же образом (из-за того, как MySQL используется для его обработки), поэтому приложения могут форматировать столбец как флажок, если они проверяют тип и принимают решение о формате на основе этого.

может быть неправильно, но:

Tinyint-это целое число от 0 до 255

бит либо 1, либо 0

поэтому для меня бит-это выбор для булевых

из моего опыта я говорю вам, что бит имеет проблемы с типами ОС linux(Ubuntu for ex). Я разработал свою БД в windows, и после того, как я развернул все в linux, у меня возникли проблемы с запросами, которые вставляли или выбирали из таблиц, которые имели тип данных BIT.

бит сейчас небезопасен. Я перешел на tinyint (1) и работал отлично. Я имею в виду, что вам нужно только значение для дифференциации, если это 1 или 0 и tinyint(1) это нормально для этого