Jednym z typów danych numerycznych w MySQL 8 jest typ
BIT(M)
. Służy on do przechowywania liczby całkowitej przekazanej w postaci bitowej lub liczby, o podanej ograniczonej liczbie bitów.
M w nawiasach oznacza maksymalną liczbę bitów, jaką możemy do kolumny tego typu przekazać. I tak BIT(5) oznacza, że możemy przechowywać wartość bitową złożoną z nie więcej niż 5 bitów. M może przyjmować wartości od 1 do 64. Domyślną wartością dla M jest 1, więc jeśli podasz typ danych tylko jako BIT, zostanie przydzielone miejsce na wartość tylko jedno bitową ,a więc 0 lub 1. Umożliwia to za pomocą typu danych BIT przedstawić wartość boolean:
true
oznacza 1, a
false
0.
Aby do kolumny tego typu przekazać wartość należy ją przedstawić w apostrofach w postaci zer i jedynek i poprzedzić literą b lub B np.
b'
1101'
,
B'
1110'
lub przedstawić w postaci liczby całkowitej, gdyż typ BIT należy do kategorii typów numerycznych całkowitoliczbowych, albo podać zero i literę
b
(małą literę, bo
B
nie zadziała) i bez apostrofów wypisać ciąg zer i jedynek liczby (
0b
1001
).
Jeśli ustawisz kolumnę na BIT(4), a wprowadzisz wartość złożoną z mniej bitów np. B’101′, brakująca liczba bitów zostanie uzupełniona od lewej strony zerami, a więc w tym przypadku będzie to B’0101′ (zostanie na początku dodane jedno zero). W praktyce i tak tego nie zobaczymy, bo w tabeli zostanie wyświetlona liczba całkowita odpowiadająca przekazanej wartości bitowej.
Sprawdźmy jak typ danych BIT działa w praktyce. Otwórzmy konsolę MySQL Shell,
przejdźmy w tryb sql i połączmy się z serwerem MySQL:
Następnie za pomocą polecenia:
USE test;
łączymy się z bazą, u mnie z bazą
test
(polecenie
CREATE DATABASE test;
utworzy tą bazę):
Tworzymy w niej tabelę złożoną z tylko jednej kolumny o nazwie
source
typu
BIT
.
CREATE TABLE example(source BIT);
Następnie wstawimy do niej kilka wierszy danych.
INSERT INTO example VALUES(b'1');
INSERT INTO example VALUES(B'0');
INSERT INTO example VALUES(0b1);
Dane zostały wstawione bez błędów:
Za pomocą polecenia:
SELECT * FROM example;
wybieramy dane z tabeli.
A co jeśli dla typu BIT, domyślnie ograniczonego do 1 bitu, spróbujemy wstawić większą wartość:
INSERT INTO example VALUES(b'10');
Pojawił się błąd z informacją, że wstawiana wartość jest zbyt długa. Podobnie w przypadku próby wstawienia liczby 2 (zajmuje 2 bity, bo ma wartość:
10
):
INSERT INTO example VALUES(2);
Ale za to uda się wstawić liczby 0 i 1:
INSERT INTO example VALUES(0);
INSERT INTO example VALUES(1);
Wyczyśćmy tabelę
example
z danych za pomocą polecenia:
DELETE FROM example;
Pozwoli nam to lepiej obserwować wyniki kolejnych zapytań SQL.
Synonimem dla
BIT
jest
BOOLEAN
, więc możemy wstawić do kolumny typu BIT wartości
FALSE
lub
TRUE
:
INSERT INTO example VALUES(
TRUE
);
INSERT INTO example VALUES(
FALSE
);
Spójrzmy na wartości w tabeli:
Jak widzimy w miejsce
TRUE
zostało wstawione 1, a w miejsce
FALSE
zero.
Do tego typu kolumny możemy wstawić także NULL:
INSERT INTO example VALUES(
NULL
);
, jeśli na kolumnie nie nadaliśmy ograniczenia NOT NULL:
Do tego momentu rozpatrywaliśmy typ danych BIT ograniczający wartości do 1 bita. Teraz przejdziemy do typu BIT pozwalającego na przechowywanie więcej bitów, w naszym przykładzie 3 bitów. Usuwamy więc tabelę
example
za pomocą polecenia;
DROP TABLE example;
i tworzymy nową o tej samej nazwie, ale innym typie danych:
CREATE TABLE example(source
BIT(3)
);
Następnie tabelę zasilamy danymi 3 bitowymi:
INSERT INTO example VALUES(0b
111
);
Zauważ, że wstawione bity: 111, pojawiły się w tabeli jako liczba 7, bo typ danych BIT to typ numeryczny. A co się stanie przy próbie wstawienia cztero-bitowej wartości:
INSERT INTO example VALUES(B'
1000'
);
Oczywiście pojawi się błąd wynikający z długości sekwencji bitów. Ten sam błąd pojawi się także przy próbie wstawienia liczby 8, bo liczba ta wymaga do jej przedstawienia 4 bitów (
1000
):
INSERT INTO example VALUES(8);
Ale liczba 7 zostanie wstawiona bez problemu, bo zajmuje 3 bity (wartość:
111
):
INSERT INTO example VALUES(
7
);
W MySQL typ danych BIT działa tylko dla liczb całkowitych nieujemnych.