Guia Completo de Decisão (A vs B vs C)
⚡ Abrir Lista Compacta de Todos os Comandos & Tipos →

Todos os Tipos SQL: Para que servem, Onde usar e O que muda entre A, B ou C

Consulte todos os tipos de campos do banco de dados organizados por categoria funcional. Entenda exatamente para que serve cada tipo, onde aplicar no seu projeto e o que muda na prática se você escolher o tipo A, B ou C na hora de desenhar no DrawDB e programar em PHP.

6. Binários, Arquivos (BLOBs) e Coordenadas de Mapa (Geo)

Para bytes criptográficos, endereços IP compactados, anexos e coordenadas GPS.

4 Tipos SQL nesta categoria

⚖️ O que muda se eu salvar fotos/PDFs em (A) VARCHAR (Caminho/URL) vs (B) BLOB (Dentro do Banco)?

Comparativo de Impacto Real (A vs B vs C)
A Arquitetura Profissional Rápida

Opção A: Usar VARCHAR(255) com o Caminho/URL do Arquivo (RECOMENDADO)

🔄 O que muda no banco: O arquivo físico (.jpg, .webp, .pdf) é salvo em uma pasta `/uploads` do servidor ou em nuvem (S3 / Cloudflare R2), e o banco guarda apenas o texto `"uploads/foto-123.webp"` (30 bytes!).
✅ Vantagem: O banco de dados continua super leve (poucos megabytes), os backups rodam em segundos e o navegador carrega as imagens direto com cache.
⚠️ Cuidado / Limitação: Ao apagar o registro no banco, seu código PHP também deve apagar o arquivo da pasta (ou manter rotina de limpeza).
🎯 Use em 99% dos sistemas web para fotos de perfil, imagens de produtos, vídeos e PDFs.
B Bytes Brutos dentro da Tabela

Opção B: Usar BLOB / MEDIUMBLOB / LONGBLOB (Arquivo dentro do Banco)

🔄 O que muda no banco: Os milhões de bytes da imagem ou PDF são gravados diretamente dentro da tabela SQL.
✅ Vantagem: O arquivo vai junto automaticamente no mesmo `mysqldump` e fica protegido pelas mesmas transações ACID do banco.
⚠️ Cuidado / Limitação: Deixa o banco gigabytes mais pesado, consome a memória RAM de cache do SQL e exige um script PHP intermediário para ler os bytes toda vez que exibir a imagem.
🎯 Use apenas para arquivos minúsculos e ultra-confidenciais (como certificados digitais A1 `.pfx` ou chaves criptográficas).
C Hashes, UUID Compacto e Endereços IP

Opção C: Usar BINARY(16) / VARBINARY(16)

🔄 O que muda no banco: Guarda bytes curtos de tamanho exato sem codificação de texto.
✅ Vantagem: Um UUID em `BINARY(16)` ocupa metade do espaço de um `CHAR(36)` (16 bytes vs 36 bytes), e um IP em `VARBINARY(16)` ocupa apenas 4 a 16 bytes em vez de `VARCHAR(45)`.
⚠️ Cuidado / Limitação: Exige funções de conversão (`BIN_TO_UUID` / `inet_ntop`) para ler como texto humano.
🎯 Use quando precisar de altíssima performance em tabelas com dezenas de milhões de IPs ou hashes.
BINARY(n) / VARBINARY(n) 📐 DrawDB: BINARY ou VARBINARY | Size: n (ex: 16, 32)
💾 Fixo (BINARY) ou Variável (VARBINARY) em bytes puros

📌 Para que serve este Tipo SQL:

Armazenar sequências curtas de bytes brutos (sem tabela de caracteres/acentos).

📍 Onde posso usar:

  • • Endereços IPv4 e IPv6 compactados com `inet_pton()`: VARBINARY(16)
  • • UUID compactado em bytes: BINARY(16)
  • • Hash SHA-256 binário puro: BINARY(32)

⚖️ O que muda se eu escolher este?

Compara byte a byte (muito mais rápido que comparar texto com collation UTF-8) e economiza até 55% de espaço em hashes e UUIDs.

🐘 PHP PDO: Use `inet_pton($ip)` e `inet_ntop($bin)` no PHP para IPs.
Ver código SQL/PHP →
TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB 📐 DrawDB: BLOB (ou MEDIUMBLOB / LONGBLOB)
💾 TINYBLOB: 255 B | BLOB: 64 KB | MEDIUMBLOB: 16 MB | LONGBLOB: 4 GB

📌 Para que serve este Tipo SQL:

Armazenar arquivos binários ou dados criptografados diretamente no banco.

📍 Onde posso usar:

  • • Certificados digitais fiscais (.pfx) criptografados, assinaturas biométricas compactas

⚖️ O que muda se eu escolher este?

Diferente do TEXT, o BLOB não possui charset/collation (guarda bytes puros). Evite usar para fotos públicas do site (prefira salvar no disco e guardar a URL em VARCHAR).

🐘 PHP PDO: Use `PDO::PARAM_LOB` ao fazer bind de streams ou bytes binários.
Ver código SQL/PHP →
POINT (Geolocalização Espacial) 📐 DrawDB: POINT (ou 2 colunas DECIMAL 10,8 e 11,8)
💾 25 Bytes (Interno WKB + SRID)

📌 Para que serve este Tipo SQL:

Guardar um ponto geográfico (Longitude e Latitude) para cálculos nativos de distância em mapas.

📍 Onde posso usar:

  • • Localização de lojas, entregadores ou imóveis para buscar "todos num raio de 5 km"

⚖️ O que muda se eu escolher este?

Se usar 2 colunas `DECIMAL(10,8)` e `DECIMAL(11,8)`, é muito mais simples de ler e gravar no PHP. Se usar `POINT`, você ganha o poder de criar um `SPATIAL INDEX` e usar `ST_Distance_Sphere()` no SQL!

🐘 PHP PDO: Para simplicidade em 95% dos projetos, duas colunas `latitude DECIMAL(10,8)` e `longitude DECIMAL(11,8)` são mais fáceis de manter no DrawDB e no PHP.
Ver código SQL/PHP →
POLYGON / GEOMETRY 📐 DrawDB: POLYGON ou GEOMETRY
💾 Variável conforme o número de vértices do mapa

📌 Para que serve este Tipo SQL:

Desenhar áreas fechadas no mapa (bairros, zonas de taxa de entrega, fazendas).

📍 Onde posso usar:

  • • Verificar se o ponto GPS da casa do cliente cai dentro da área de cobertura de entrega (`ST_Contains`).

⚖️ O que muda se eu escolher este?

Permite que o próprio banco de dados responda se uma coordenada está dentro ou fora de um polígono desenhado no mapa.

🐘 PHP PDO: Use funções `ST_GeomFromText` ou `ST_GeomFromGeoJSON` nas consultas PDO.
Ver código SQL/PHP →