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 0
wartością domyślną. Następnie aktualizuję wartość do 2
. Logicznie rzecz biorąc, chciałbym oczekiwać MySQL przyjąć albo 0
albo 1
ponieważ 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?
BIT
jest to naprawdę pole bitowe, w którym mieści się od jednego do sześćdziesięciu czterech bitów.Jeśli pracujesz z innymi osobami (lub chcesz sobie przypomnieć), możesz użyć typu danych,
BOOLEAN
aby zasugerować, że dane mają przyjmować wartość 1 lub 0.źródło
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.
źródło