Подтвердить что ты не робот

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

В каких случаях вы бы это использовали? Есть большая разница? Что я обычно использовал двигателями персистентности для хранения логических данных?

4b9b3361

Ответ 1

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

Ответ 2

alt text http://dev.mysql.com/common/logos/logo_mysql_sun_a.gif

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

БИТ [(М)]

Тип битового поля. 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)] [UNSIGNED] [ZEROFILL]

Очень маленькое целое число. Подписанный диапазон от -128 до 127. Беззнаковый диапазон равен От 0 до 255.

Кроме того, рассмотрите это:

BOOL, BOOLEAN

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

Ответ 3

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

Ответ 4

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

Для версий старше 5.0.3 BIT интерпретируется как TINYINT (1), поэтому там нет.

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

Ответ 5

Возможно, это неверно, но:

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

бит

равен 1 или 0

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

Ответ 6

Из моего опыта я рассказываю вам, что BIT имеет проблемы с типами ОС Linux (Ubuntu for ex). Я разработал свой db на окнах, и после того, как я развернул все в Linux, у меня были проблемы с запросами, которые вставлены или выбраны из таблиц с типом BIT DATA TYPE.

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