Referência Completa de Tipos de Dados SQL

Manual de Todos os Campos do Banco de Dados

Explore cada tipo de campo (VARCHAR, CHAR, INT, DECIMAL, TIMESTAMP, JSON, ENUM...) agrupado por funcionalidade, como configurar no DrawDB e como validar e gravar com PHP 8 + PDO.

10. Binários & Hashes Brutos 1 tipo

Armazenamento de bytes puros, chaves criptográficas, UUIDs compactados e arquivos (e quando usar Storage externo).

BINARY / VARBINARY / BLOB (Dados Binários)

💾 BINARY(16): 16 Bytes | BLOB: até 64 KB | MEDIUMBLOB: até 16 MB | LONGBLOB: até 4 GB

Armazena bytes brutos sem codificação de caracteres (chaves criptográficas, UUID binário, certificados).

`BINARY(n)` e `VARBINARY(n)` funcionam exatamente como `CHAR` e `VARCHAR`, mas guardam bytes puros em vez de caracteres de texto (sem collation). Já `BLOB` (Binary Large Object) guarda arquivos binários maiores. REGRA DE OURO DA ARQUITETURA: Evite salvar fotos de produtos, PDFs ou vídeos dentro de colunas `BLOB` no banco! Salve os arquivos no disco ou em Object Storage (Amazon S3, Cloudflare R2, MinIO) e grave apenas o caminho/URL em um `VARCHAR(255)` no banco.

Limites de Capacidade: Bytes puros sem conversão de charset

✅ Quando Usar (Casos Ideais)

  • • `BINARY(16)`: Armazenar UUID compactado em 16 bytes (`UUID_TO_BIN` no MySQL 8) ou endereços IPv4/IPv6 com `inet_pton()` do PHP (`VARBINARY(16)`).
  • • `VARBINARY` / `BLOB`: Certificados digitais A1 (`.pfx`) criptografados, chaves criptográficas pequenas ou assinaturas digitais.

🚫 Quando NÃO Usar (Armadilhas)

  • • Fotos de usuários, imagens de produtos, vídeos ou relatórios em PDF — eles inflam o backup do banco de dados e esgotam a memória RAM de cache (Buffer Pool). Use `VARCHAR(255)` com a URL do arquivo!

📐 Como Configurar no DrawDB Abrir DrawDB ↗

Type no DrawDB: VARBINARY ou BLOB
Size / Values: 16 (para IP ou UUID binário em VARBINARY)
Default sugerido: Vazio
Equivalência nos Dialetos do DrawDB:
MySQL / MariaDB BINARY(16), VARBINARY(255) ou BLOB
PostgreSQL BYTEA (ou tipo INET nativo para endereços IP)
SQLite BLOB

📋 Exemplos Reais de Colunas com VARBINARY:

ip_binario
VARBINARY(16) NOT NULL
Suporta tanto IPv4 (4 bytes) quanto IPv6 (16 bytes)
foto_perfil_url
VARCHAR(255) NULL
Alternativa recomendada ao BLOB para imagens!
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
CREATE TABLE sessoes_seguranca (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    usuario_id BIGINT UNSIGNED NOT NULL,
    ip_endereco VARBINARY(16) NOT NULL COMMENT 'IPv4 ou IPv6 compactado via inet_pton',
    token_hash BINARY(32) NOT NULL COMMENT 'SHA-256 binário puro de 32 bytes'
);
🐘 Como Validar e Salvar no PHP 8 + PDO
<?php
declare(strict_types=1);

// Armazenando endereço IP (IPv4 ou IPv6) em VARBINARY(16) via inet_pton() do PHP
$ipCliente = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
$ipBinario = inet_pton($ipCliente); // Converte para 16 bytes binários

// Hash SHA-256 binário puro (32 bytes em vez de 64 caracteres hexadecimais)
$tokenHashBinario = hash('sha256', 'token-secreto-do-usuario', true);

$stmt = $pdo->prepare('
    INSERT INTO sessoes_seguranca (usuario_id, ip_endereco, token_hash)
    VALUES (:usuario_id, :ip, :token)
');
$stmt->bindValue(':usuario_id', 1, PDO::PARAM_INT);
$stmt->bindValue(':ip', $ipBinario, PDO::PARAM_LOB);
$stmt->bindValue(':token', $tokenHashBinario, PDO::PARAM_LOB);
$stmt->execute();

// Para converter de volta dos bytes para string de IP legível no PHP:
$ipLegivel = inet_ntop($ipBinario);