问题在MySQL数据库中存储纬度和经度值

Ibr*_*mar 17 php mysql floating-point types

我想将从Google Maps GeoCoding API获取的纬度和经度值存储在MySQL数据库中.值为浮点格式.

12.9274529

77.5905970

当我想将它存储在数据库(数据类型为float)时,它会向上舍入浮动并以下列格式存储它:

12.9275

77.5906

我使用了错误的数据类型吗?如果是,那么我应该使用什么数据类型来存储纬度和经度值?

更新:

这是Allin要求的CREATE TABLE

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 ;
Run Code Online (Sandbox Code Playgroud)

Ali*_*aru 40

如果您不希望近似数字,则需要使用小数.

定点(精确值)类型

DECIMAL和NUMERIC类型存储精确的数值数据值.在保持精确精度很重要时使用这些类型,例如使用货币数据.

而现在"你走了"回答:

使用DECIMAL(10,7).10数字中的总位数在哪里,7是后面的位数..(这意味着在点之前将是3数字.)

根据需要调整这些数字.另请参阅我在答案前面链接的手册条目.


Joh*_*ica 8

MySQL有适用于GIS应用程序的特殊类型.

使用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-和distance_spheroid.html

这是一个方法:http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html


Bil*_*oon 7

使用 double

float缺少必要的精度来保存小数点后的位数.double虽然并不总是保证所有数字都有7位小数,但小数点左边的数字不能超过8位,所以应该符合你的需要.

  • -1`Double`与`Float`几乎相同,只是精度更高. (2认同)
  • @Alin,当然不是,但我认为使用double没有问题.你能详细说说吗? (2认同)