Проблема Сохранение значений широты и долготы в базе данных MySQL

Я хочу сохранить значения широты и долготы из Google Maps GeoCoding API в базе данных MySQL. Значения находятся в поплавком формате.

12.9274529

77.5905970

И когда я хочу сохранить его в базе данных (который является float типа datatype), он округляет float и сохраняет его в следующем формате:

12,9275

77,5906

Я использую неправильный тип данных? Если да, то какой тип данных следует использовать для хранения значений широты и долготы?

Обновить :

здесь CREATE TABLE, как запрошено Allin

CREATE TABLE `properties` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `description` text, `latitude` float DEFAULT NULL, `longitude` float DEFAULT NULL, `landmark` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `serial` (`serial`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 

Вам нужно использовать десятичное число, если вы не хотите, чтобы цифры были приблизительными.

Типы с фиксированной точкой (точные значения)

Типы DECIMAL и NUMERIC сохраняют точные значения числовых данных. Эти типы используются, когда важно сохранять точную точность, например, с денежными данными.

И теперь ответ «вот ты»:

Используйте DECIMAL(10,7) . Где 10 – общее количество цифр в числе, а 7 – количество цифр после . , (Это означает, что перед точкой будет 3 цифры.)

При необходимости отрегулируйте эти цифры. Также, пожалуйста, взгляните на ручную запись, которую я связал ранее в ответе.

У MySQL есть специальные типы для ГИС-приложений.

Используйте тип point и посмотрите:

http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

Для общей дискуссии см .: http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html

Некоторые ребята сделали специальный UDF для вычисления расстояний между точками на сфере (т.е. землей)
См .: http://www.lenzg.net/archives/220-New-UDF-for-MySQL-5.1-provides-GIS-functions-distance_sphere-and-distance_spheroid.html

Вот как это делается: http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html

использовать double

float не имеет необходимой точности, чтобы сохранить это число цифр после десятичной точки. double , хотя и не всегда гарантированно имеет 7 знаков после запятой для всех чисел, будет иметь место, где слева от десятичного разряда должно быть не более 8 цифр, поэтому оно должно соответствовать вашим потребностям.

Оптимальная настройка в моем опыте – DOUBLE (11,8), имейте в виду, что lat / lng может быть> 99

Измените таблицу таким образом, чтобы вместо float с одиночной точностью плавать с двойной точностью :

 alter table properties modify latitude double, modify longitude double; 

Десятичного числа (10,8) более чем достаточно. Некоторые устройства GPS обеспечивают более точное положение.

Использование Double

 CREATE TABLE `properties` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `description` text, `latitude` Double DEFAULT NULL, `longitude` Double DEFAULT NULL, `landmark` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `serial` (`serial`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;