Jakie są zalety używania BOOLEAN w porównaniu do TINYINT (1)?


16

Z podręcznika MySQL mówi:

BOOL, BOOLEAN

Te typy są synonimami TINYINT (1). Wartość zero jest uważana za fałsz. Niezerowe wartości są uważane za prawdziwe:

Utworzyłem kolumnę BOOLEAN z 0wartością domyślną. Następnie aktualizuję wartość do 2. Logicznie rzecz biorąc, chciałbym oczekiwać MySQL przyjąć albo 0albo 1ponieważ jest to logiczna. Jednak MySQL nie spowodował błędu ani nie uniemożliwił mi wykonania aktualizacji.

Jeśli BOOLEAN działa dokładnie tak samo jak TINYINT (1), czy ma to jakiekolwiek znaczenie, czy używam TINYINT (1) czy BOOLEAN?

Odpowiedzi:


11

Te dwa są naprawdę synonimami, więc możesz ich używać zamiennie. Nie zobaczysz żadnej różnicy między nimi.

Jeśli chcesz zezwolić tylko na 0 i 1, nadal możesz użyć tego bittypu.


1
@QuestionOverflow Należy pamiętać, że BITjest to naprawdę pole bitowe, w którym mieści się od jednego do sześćdziesięciu czterech bitów.
David Harkness

2

Jeśli pracujesz z innymi osobami (lub chcesz sobie przypomnieć), możesz użyć typu danych, BOOLEANaby zasugerować, że dane mają przyjmować wartość 1 lub 0.


0

Wydaje mi się, że rzeczywiście jest różnica.

W tabeli, której używam, mam kolumnę zdefiniowaną jako tinyint z indeksem na kolumnie. Gdy wywołuję następujące zapytanie „wyjaśnij wybierz * z tabeli, w której kolumna jest prawdziwa”, oznacza to, że odczyta wszystkie wiersze w tabeli (kolumny „możliwe_klucz” i „odwołanie” są puste, mimo że kolumna „klucz” pokazuje indeks).

Zmieniając zapytanie na „wyjaśnij wybierz * z tabeli, w której kolumna = 1” indeks jest uruchamiany poprawnie, z kolumnami „możliwym kluczom” i „ref” przypisanymi wartościami i „wierszami” ustawionymi na znacznie niższą liczbę.

Próbowałem również zamienić „prawda” na „fałsz”, a 1 na 0 i uzyskałem porównywalne wyniki.

Idąc o krok dalej, zmieniłem z maleintego na int i to nie miało znaczenia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.