Odpowiedzi:
TINYINT to 8-bitowa wartość całkowita, pole BIT może przechowywać od 1 bitu, BIT (1) do 64 bitów, BIT (64). W przypadku wartości logicznych BIT (1) jest dość powszechny.
Z przeglądu typów liczbowych ;
BIT [(M)]
Typ pola bitowego. M oznacza liczbę bitów przypadających na wartość, od 1 do 64. Wartością domyślną jest 1, jeśli pominięto M.
Ten typ danych został dodany w MySQL 5.0.3 dla MyISAM i rozszerzony w 5.0.5 na MEMORY, InnoDB, BDB i NDBCLUSTER. Przed 5.0.3 BIT jest synonimem TINYINT (1).
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Bardzo mała liczba całkowita. Zakres ze znakiem to od -128 do 127. Zakres bez znaku to od 0 do 255.
Dodatkowo rozważ to;
BOOL, BOOLEAN
Te typy są synonimami TINYINT (1). Wartość zero jest uważana za fałszywą. Wartości niezerowe są uważane za prawdziwe.
boolean
zajmie to bajt, mimo że to naprawdę tylko trochę, więc BIT (1) jest lepszy po wersji 5.0.3?
BOOL
/ BOOLEAN
są aliasy dla TINYINT(1)
zamiast BIT
. Jasne, wszystkie zajmują cały bajt, ale semantycznie BIT
byłoby znacznie bardziej odpowiednie.
Wszystkie te teoretyczne dyskusje są świetne, ale w rzeczywistości, przynajmniej jeśli używasz MySQL i naprawdę również dla SQLServer, najlepiej trzymać się danych niebinarnych dla swoich wartości logicznych z tego prostego powodu, że łatwiej jest z nimi pracować, gdy wyprowadzanie danych, wysyłanie zapytań i tak dalej. Jest to szczególnie ważne, jeśli próbujesz osiągnąć interoperacyjność między MySQL i SQLServer (tj. Synchronizujesz dane między nimi), ponieważ obsługa typu danych BIT jest różna w obu z nich. WIĘC w praktyce będziesz miał dużo mniej kłopotów, jeśli będziesz trzymać się numerycznego typu danych. Poleciłbym MySQL trzymać się z BOOL lub BOOLEAN, który jest przechowywany jako TINYINT (1). Nawet sposób, w jaki MySQL Workbench i MySQL Administrator wyświetlają typ danych BIT, nie jest przyjemny (to mały symbol danych binarnych).
BIT powinien zezwalać tylko na 0 i 1 (i NULL, jeśli pole nie jest zdefiniowane jako NIE NULL). TINYINT (1) pozwala na dowolną wartość, która może być przechowywana w jednym bajcie, -128..127 lub 0..255 w zależności od tego, czy jest bez znaku (cyfra 1 wskazuje, że zamierzasz użyć tylko jednej cyfry, ale tak nie przeszkadza w przechowywaniu większej wartości).
W przypadku wersji starszych niż 5.0.3 BIT jest interpretowany jako TINYINT (1), więc jest ma różnicy.
BIT ma semantykę „to jest boolowska”, a niektóre aplikacje będą traktować TINYINT (1) w ten sam sposób (ze względu na sposób, w jaki MySQL je traktował), więc aplikacje mogą sformatować kolumnę jako pole wyboru, jeśli sprawdzą typ i na tej podstawie zdecyduj o formacie.
Może się mylić, ale:
Tinyint to liczba całkowita od 0 do 255
bit ma wartość 1 lub 0
Dlatego dla mnie bit jest wyborem dla wartości logicznych
Z mojego doświadczenia mówię ci, że BIT ma problemy z typami systemów operacyjnych Linux (np. Ubuntu). Opracowałem swoją bazę danych w systemie Windows i po wdrożeniu wszystkiego w systemie Linux miałem problemy z zapytaniami, które wstawiały lub wybierały z tabel, które miały BITOWY TYP DANYCH.
Bit nie jest na razie bezpieczny. Zmieniłem na tinyint (1) i działałem idealnie. Chodzi mi o to, że potrzebujesz tylko wartości do rozróżnienia, czy jest 1 lub 0 i tinyint (1) jest w porządku