Você pode usar as extensões espaciais do MySQL com GIS.
Em um exemplo de código do Google que exibe pontos em um mapa, eles declaram:
Ao criar a tabela MySQL, você deseja prestar atenção especial aos atributos lat e lng. Com os recursos atuais de zoom do Google Maps, você só precisa de 6 dígitos de precisão após o decimal.
Para manter o espaço de armazenamento necessário para nossa tabela no mínimo, você pode especificar que os atributos lat e lng sejam de tamanho flutuante (10,6). Isso permitirá que os campos armazenem 6 dígitos após o decimal, mais até 4 dígitos antes do decimal, por exemplo, -123.456789 graus. Não me preocuparia com as diferenças de desempenho entre os tipos numéricos. Índices decentes terão um efeito muito maior.
Você também pode tentar DECIMAL
como @ gandaliter sugere.
DECIMAL
é o tipo de dados MySQL para aritmética exata. Ao contrário, FLOAT
sua precisão é fixa para qualquer tamanho de número; portanto, ao usá-lo, FLOAT
você pode evitar erros de precisão ao fazer alguns cálculos. Se você estivesse apenas armazenando e recuperando os números sem cálculo, na prática FLOAT
seria seguro, embora não haja mal em usá-lo DECIMAL
. Com os cálculos FLOAT
ainda é praticamente bom, mas para ter certeza absoluta de 8d.p. precisão que você deve usar DECIMAL
.
As latitudes variam de -90 a +90 (graus), então DECIMAL(10,8)
tudo bem, mas as longitudes variam de -180 a +180 (graus), então você precisa
DECIMAL(11,8)
. O primeiro número é o número total de dígitos armazenados e o segundo é o número após o ponto decimal. Resumindo: lat DECIMAL(10,8) NOT NULL, lng DECIMAL(11,8) NOT NULL
Isso explica como o MySQL funciona com tipos de dados de ponto flutuante.
Informação relacionada: