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.

✕

3. Decimais & Financeiros 1 tipo

Números com casas decimais de precisão exata (dinheiro, taxas, pesos) ou ponto flutuante científico.

FLOAT / DOUBLE (Ponto Flutuante)

💾 FLOAT: 4 Bytes | DOUBLE: 8 Bytes

Números científicos aproximados de alta velocidade para sensores, física, estatística e telemetria.

FLOAT (precisão simples, 4 bytes) e DOUBLE (precisão dupla, 8 bytes) utilizam o padrão IEEE 754 de ponto flutuante binário. São processados diretamente pela unidade de ponto flutuante (FPU) do processador com extrema velocidade, mas são valores APROXIMADOS.

Limites de Capacidade: FLOAT: ~7 dígitos de precisão | DOUBLE: ~15-17 dígitos de precisão

✅ Quando Usar (Casos Ideais)

  • • Medições de sensores IoT (temperatura ambiente, umidade do ar, pressão atmosférica, velocidade do vento).
  • • Métricas estatísticas aproximadas, pesos de algoritmos de Machine Learning ou gráficos científicos.

🚫 Quando NÃO Usar (Armadilhas)

  • • PROIBIDO para valores financeiros, contábeis, preços ou saldos bancários (use `DECIMAL`).
  • • Evite fazer `WHERE valor_float = 19.99` em SQL, pois a representação binária interna pode ser `19.989999771118164`.

📐 Como Configurar no DrawDB Abrir DrawDB ↗

Type no DrawDB: DOUBLE (ou FLOAT / REAL)
Size / Values: Vazio (a sintaxe FLOAT(M,D) foi depreciada no MySQL 8)
Default sugerido: 0
Equivalência nos Dialetos do DrawDB:
MySQL / MariaDB DOUBLE ou FLOAT
PostgreSQL DOUBLE PRECISION ou REAL
SQLite REAL

📋 Exemplos Reais de Colunas com DOUBLE:

temperatura_celsius
FLOAT NOT NULL
Leitura de sensor térmico (ex: 23.45)
score_relevancia
DOUBLE NOT NULL DEFAULT 0
Pontuação estatística de busca
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
CREATE TABLE leituras_sensor (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sensor_id INT UNSIGNED NOT NULL,
    temperatura_celsius FLOAT NOT NULL,
    umidade_relativa FLOAT NOT NULL,
    lido_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
🐘 Como Validar e Salvar no PHP 8 + PDO
<?php
declare(strict_types=1);

$temperatura = filter_var('24.65', FILTER_VALIDATE_FLOAT);
if ($temperatura === false) {
    throw new InvalidArgumentException('Temperatura inválida.');
}

$stmt = $pdo->prepare('
    INSERT INTO leituras_sensor (sensor_id, temperatura_celsius, umidade_relativa)
    VALUES (:sensor_id, :temp, :umidade)
');
$stmt->bindValue(':sensor_id', 1, PDO::PARAM_INT);
$stmt->bindValue(':temp', (string) $temperatura, PDO::PARAM_STR);
$stmt->bindValue(':umidade', '62.5', PDO::PARAM_STR);
$stmt->execute();