Tipo de dados BINÁRIO MySQL

Resumo : neste tutorial, você aprenderá sobre BINARYo 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 BINARYtipo de dados é usado para armazenar dados binários de comprimento fixo. Por exemplo, você pode usar BINARYo tipo de dados para colunas que armazenam hashes e somas de verificação, SHA-256porque esses valores têm um comprimento fixo.

Para declarar uma coluna que usa o BINARYtipo 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, sizeespecifica 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 BINARYcoluna, o MySQL preencherá automaticamente o valor com zero bytes (0x00) no lado direito para atingir o sizecomprimento definido.

Nenhuma remoção de bytes finais para recuperações

Quando você recupera um valor da BINARYcoluna, 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 BINARYo valor na WHEREcláusula, ORDERclá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 BINARYvalores 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 BINARYcoluna 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 BINARYtipo de dados para armazenar SHA-256 hashes.

Primeiro, crie uma tabela para armazenar os SHA-256hashes:

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_demotem duas colunas:

Segundo, insira um SHA-256hash 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 SHAhash -256 da string ‘Hello’.

A UNHEX()função converte a representação hexadecimal do SHAhash -256 em dados binários antes de inseri-los na BINARYcoluna.

Terceiro, recupere os dados da BINARYcoluna 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 BINARYo tipo de dados para armazenar dados binários de comprimento fixo, como hashes ou arquivos UUID.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *