Resumo : neste tutorial, você aprenderá sobre BINARY
o tipo de dados MySQL e como usá-lo para armazenar dados binários de comprimento fixo.
Introdução ao tipo de dados MySQL BINARY
O BINARY
tipo de dados é usado para armazenar dados binários de comprimento fixo. Por exemplo, você pode usar BINARY
o tipo de dados para colunas que armazenam hashes e somas de verificação, SHA-256
porque esses valores têm um comprimento fixo.
Para declarar uma coluna que usa o BINARY
tipo de dados, você especifica o comprimento máximo de dados binários que ela pode conter:
column_name BINARY(size);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe, size
especifica o número de bytes que o nome da coluna pode armazenar.
Preenchimento à direita com 0x00 (zero bytes)
Quando você insere um valor binário cujo comprimento é menor que o comprimento especificado para a BINARY
coluna, o MySQL preencherá automaticamente o valor com zero bytes (0x00) no lado direito para atingir o size
comprimento definido.
Nenhuma remoção de bytes finais para recuperações
Quando você recupera um valor da BINARY
coluna, o MySQL não remove nenhum byte zero à direita que foi preenchido durante a inserção.
Em outras palavras, se você inseriu um valor binário e ele foi preenchido à direita com zero bytes, esses zero bytes estarão presentes quando você recuperar os dados.
Todos os bytes são significativos nas comparações
Ao comparar BINARY
o valor na WHERE
cláusula, ORDER
cláusula ou DISTINCT
, o MySQL considera todos os bytes.
Isso significa que mesmo zero bytes à direita podem afetar os resultados da comparação, e o MySQL não considerará dois BINARY
valores iguais, a menos que todos os seus bytes correspondam.
0x00 e espaço diferem nas comparações
O MySQL trata os zero bytes (0x00) e o caractere de espaço (0x20) de maneira diferente nas comparações.
Se você tiver uma BINARY
coluna com valores que contenham zero bytes e caracteres de espaço, o MySQL não considerará esses valores como iguais.
Além disso, o MySQL coloca bytes nulos antes dos caracteres de espaço nas operações de classificação (por exemplo, ORDER
BY
).
Exemplo de tipo de dados BINÁRIO MySQL
Daremos um exemplo de uso do BINARY
tipo de dados para armazenar SHA
-256 hashes.
Primeiro, crie uma tabela para armazenar os SHA-256
hashes:
CREATE TABLE binary_demo(
id INT AUTO_INCREMENT PRIMARY KEY,
data BINARY(32) -- 32 bytes for SHA-256
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O binary_demo
tem duas colunas:
- id: uma coluna de chave primária incrementada automaticamente .
- dados: uma
BINARY
coluna com tamanho fixo de 32 bytes para armazenarSHA-256
hashes.
Segundo, insira um SHA-256
hash na tabela:
INSERT INTO binary_demo(data)
VALUES (UNHEX(SHA2('Hello', 256)));
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Calcula SHA2('Hello', 256)
o SHA
hash -256 da string ‘Hello’.
A UNHEX()
função converte a representação hexadecimal do SHA
hash -256 em dados binários antes de inseri-los na BINARY
coluna.
Terceiro, recupere os dados da BINARY
coluna e converta-os de volta para hexadecimal usando a HEX()
função:
SELECT HEX(sha256_hash)
FROM binary_demo WHERE id = 1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+----+--------------------------------------------------------------------+
| id | data |
+----+--------------------------------------------------------------------+
| 1 | 0x185F8DB32271FE25F561A6FC938B2E264306EC304EDA518007D1764826381969 |
+----+--------------------------------------------------------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use
BINARY
o tipo de dados para armazenar dados binários de comprimento fixo, como hashes ou arquivosUUID
.