Resumo : neste tutorial, você aprenderá sobre BIT
o tipo de dados MySQL e como armazenar BIT
dados em uma coluna de uma tabela.
Introdução ao tipo de dados MySQL BIT
O BIT
tipo de dados que permite armazenar valores de bits, que são 0 e 1.
Aqui está a sintaxe para definir BIT
o tipo de uma coluna:
column_name BIT(n)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O BIT(n)
pode armazenar valores de até n bits. O valor n
pode variar de 1 a 64. O valor padrão de n é 1 se você ignorá-lo.
Portanto, as seguintes sintaxes são equivalentes:
column_name BIT(1);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
e
column_name BIT;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Literais BIT
Para especificar um valor literal de bit, você usa a notação b'val'
ou , que é um valor binário que contém apenas 0 e 1.0bval
val
O início b
pode ser escrito como B
, por exemplo, os seguintes são literais de bits válidos:
b01
B11
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
No entanto, o início 0b
diferencia maiúsculas de minúsculas. Portanto, você não pode usar 0B
. Por exemplo, o seguinte é um valor literal de bit inválido:
0B'1000'
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por padrão, o conjunto de caracteres de um literal de valor de bit é a sequência binária da seguinte forma:
SELECT CHARSET(B'); -- binary
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Exemplos de tipos de dados MySQL BIT
A instrução a seguir cria uma nova tabela chamada working_calendars
que possui a coluna de dias BIT(7)
:
CREATE TABLE working_calendars(
year INT,
week INT,
days BIT(7),
PRIMARY KEY(year,week)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Os valores da coluna days
indicam se o dia é dia útil ou dia de folga, ou seja, 1: dia útil e 0: dia de folga.
Suponha que sábado e sexta-feira da primeira semana de 2017 não sejam dias úteis, você pode inserir uma linha na working_calendars
tabela:
INSERT INTO working_calendars(year,week,days)
VALUES(2017,1,B'1111100');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A consulta a seguir recupera dados da working_calendar
tabela:
SELECT
year, week, days
FROM
working_calendars;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------+------+------------+
| year | week | days |
+------+------+------------+
| 2017 | 1 | 0x7C |
+------+------+------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
A saída indica que o valor do bit na days
coluna é convertido em um número inteiro. Para representá-lo como valores de bits, você usa a BIN
função:
SELECT
year, week, bin(days)
FROM
working_calendars;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------+------+-----------+
| year | week | bin(days) |
+------+------+-----------+
| 2017 | 1 | 1111100 |
+------+------+-----------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Se você inserir um valor em uma BIT(n)
coluna com menos de n
bits, o MySQL preencherá zeros à esquerda do valor do bit.
Suponha que o primeiro dia da segunda semana esteja desligado, você pode inserir 01111100
na days
coluna. No entanto, o 111100
valor também funcionará porque o MySQL preencherá um zero à esquerda.
INSERT INTO working_calendars(year,week,days)
VALUES(2017,2,B'111100');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para visualizar os dados você usa a mesma consulta acima:
SELECT
year, week , bin(days)
FROM
working_calendars;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------+------+-----------+
| year | week | bin(days) |
+------+------+-----------+
| 2017 | 1 | 1111100 |
| 2017 | 2 | 111100 |
+------+------+-----------+
2 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
A saída mostra que o MySQL removeu os zeros à esquerda antes de retornar o resultado. Para exibi-lo corretamente, você pode usar a LPAD()
função:
SELECT
year, week, lpad(bin(days),7,'0')
FROM
working_calendars;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------+------+-----------------------+
| year | week | lpad(bin(days),7,'0') |
+------+------+-----------------------+
| 2017 | 1 | 1111100 |
| 2017 | 2 | 0111100 |
+------+------+-----------------------+
2 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
A saída mostra o formato esperado.
Resumo
- Use
BIT
o tipo de dados MySQL para armazenarBIT
dados em uma tabela.