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

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

88 голосов | спросил carrier 14 52008vEurope/Moscow11bEurope/MoscowFri, 14 Nov 2008 17:29:46 +0300 2008, 17:29:46

5 ответов


0

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

БИТ [(М)]

  

Тип битового поля. М обозначает   количество бит на значение от 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). Нулевое значение   считается ложным. Ненулевые значения   считается верным.

ответил Nelson Miranda 14 52008vEurope/Moscow11bEurope/MoscowFri, 14 Nov 2008 17:40:31 +0300 2008, 17:40:31
0

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

ответил Sheldmandu 8 FebruaryEurope/MoscowbTue, 08 Feb 2011 15:34:06 +0300000000pmTue, 08 Feb 2011 15:34:06 +030011 2011, 15:34:06
0

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

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

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

ответил Michael Madsen 14 52008vEurope/Moscow11bEurope/MoscowFri, 14 Nov 2008 17:39:25 +0300 2008, 17:39:25
0

Возможно, это не так, но:

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

бит равен 1 или 0

Поэтому для меня бит - это выбор для логических значений

ответил Allen Hardy 14 52008vEurope/Moscow11bEurope/MoscowFri, 14 Nov 2008 17:36:13 +0300 2008, 17:36:13
0

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

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

ответил AndreiTiberiu 5 Maypm14 2014, 13:54:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132