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.

✕

11. Espaciais & Geográficos 1 tipo

Coordenadas de GPS (latitude/longitude), pontos no mapa, rotas e polígonos de áreas de entrega.

POINT / DECIMAL(10,8) (Coordenadas GPS)

💾 DECIMAL(10,8) + DECIMAL(11,8): 11 Bytes | POINT: 25 Bytes

Armazenamento de coordenadas geográficas (Latitude e Longitude) para mapas e cálculo de distância.

Você tem duas abordagens excelentes para guardar localização GPS: 1) Duas colunas separadas `latitude DECIMAL(10, 8)` e `longitude DECIMAL(11, 8)`, que é simples, universal e funciona em 100% dos bancos e ORMs; ou 2) O tipo espacial `POINT` com `SPATIAL INDEX`, ideal quando você precisa calcular raio de distância em tempo real (`ST_Distance_Sphere`) para apps de entrega.

Limites de Capacidade: Latitude: -90.00000000 a +90.00000000 | Longitude: -180.00000000 a +180.00000000

✅ Quando Usar (Casos Ideais)

  • • Endereços de lojas, restaurantes ou clientes para exibir pino no Google Maps / Leaflet (`DECIMAL(10,8)` e `DECIMAL(11,8)`).
  • • Busca geoespacial "encontrar lojas num raio de 5 km" usando `POINT` e `ST_Distance_Sphere`.

🚫 Quando NÃO Usar (Armadilhas)

  • • Não use `FLOAT` para coordenadas GPS precisas, pois perde precisão nas últimas casas decimais.

📐 Como Configurar no DrawDB Abrir DrawDB ↗

Type no DrawDB: DECIMAL (10,8 e 11,8) ou POINT
Size / Values: 10,8 (para latitude) e 11,8 (para longitude)
Default sugerido: NULL
Equivalência nos Dialetos do DrawDB:
MySQL / MariaDB DECIMAL(10, 8) / POINT SRID 4326
PostgreSQL NUMERIC(10, 8) / PostGIS GEOGRAPHY(POINT, 4326)
SQLite REAL / NUMERIC

📋 Exemplos Reais de Colunas com POINT:

latitude
DECIMAL(10, 8) NULL
Latitude GPS (ex: -23.56141400)
longitude
DECIMAL(11, 8) NULL
Longitude GPS (ex: -46.65588190)
🗄️ SQL DDL (Importar no DrawDB: Import > SQL)
CREATE TABLE filiais (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    latitude DECIMAL(10, 8) NOT NULL COMMENT 'De -90 a +90',
    longitude DECIMAL(11, 8) NOT NULL COMMENT 'De -180 a +180'
);
🐘 Como Validar e Salvar no PHP 8 + PDO
<?php
declare(strict_types=1);

$lat = -23.561414;
$lng = -46.655881;

if ($lat < -90 || $lat > 90 || $lng < -180 || $lng > 180) {
    throw new RangeException('Coordenadas GPS fora dos limites terrestres.');
}

$stmt = $pdo->prepare('
    INSERT INTO filiais (nome, latitude, longitude)
    VALUES (:nome, :lat, :lng)
');
$stmt->bindValue(':nome', 'Filial Avenida Paulista', PDO::PARAM_STR);
$stmt->bindValue(':lat', number_format($lat, 8, '.', ''), PDO::PARAM_STR);
$stmt->bindValue(':lng', number_format($lng, 8, '.', ''), PDO::PARAM_STR);
$stmt->execute();