Projektowałem bazę danych dla witryny, w której muszę użyć logicznego typu danych, aby przechowywać tylko 2 stany, prawda lub fałsz. Używam MySQL.
Projektując bazę danych przy użyciu phpMyAdmin, stwierdziłem, że mam zarówno typ danych BOOLEAN, jak i typ danych TINYINT.
Przejrzałem różne artykuły, niektórzy mówili, że TINYINT to to samo co BOOLEAN, bez różnicy. Niektórzy twierdzą, że BOOLEAN jest konwertowany na TINYINT w MySQL.
MOJE pytanie brzmi, jeśli oba są takie same, dlaczego istnieją dwa? Powinien być tylko jeden z nich.
Oto odniesienie do artykułów, które czytałem:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type -overview.html
BIT(1)
lubBIT(17)
nawetBIT(64)
Tylko uwaga dla programistów php (brakuje mi wymaganych punktów stosu, aby opublikować to jako komentarz) ... automagiczna (i cicha) konwersja do TINYINT oznacza, że php pobiera wartość z kolumny „BOOLEAN” jako „0” lub „1”, a nie oczekiwana (przeze mnie) prawda / fałsz.
Deweloper, który patrzy na SQL używany do tworzenia tabeli i widzi coś w rodzaju: „some_boolean BOOLEAN NOT NULL DEFAULT FALSE”, może rozsądnie spodziewać się wyników prawda / fałsz po pobraniu wiersza zawierającego tę kolumnę. Zamiast tego (przynajmniej w mojej wersji PHP) wynikiem będzie „0” lub „1” (tak, ciąg „0” lub „1”, a nie int 0/1, dziękuję php).
To głupota, ale wystarczająca, aby testy jednostkowe zakończyły się niepowodzeniem.
źródło
Najnowsze wersje MySQL mają nowy
BIT
typ danych, w którym możesz określić liczbę bitów w polu, na przykładBIT(1)
użyć jakoBoolean
typ, ponieważ może to być tylko0
lub1
.źródło
Począwszy od wersji MySQL 5.1 odniesieniem
==================================================== =======================
https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric
źródło
Przegląd typów numerycznych stanów MySQL: BOOL, BOOLEAN: Te typy są synonimami TINYINT (1). Wartość zero jest uważana za fałszywą. Wartości niezerowe są uważane za prawdziwe.
Zobacz tutaj: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html
źródło