我想将从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 ;
答案 0 :(得分:40)
如果您不希望数字近似,则需要使用decimal。
定点(精确值)类型
DECIMAL和NUMERIC类型存储 精确的数值数据。这些类型 在重要时使用 例如,保持精确的精度 货币数据。
现在“你走了”回答:
使用DECIMAL(10,7)
。其中10
是数字中的总位数,7
是.
之后的位数。 (这意味着在点之前将是3
个数字。)
根据需要调整这些数字。另外请查看我在答案中先前链接的手册条目。
答案 1 :(得分: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-and-distance_spheroid.html
这是一个方法:http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html
答案 2 :(得分:7)
使用double
float
缺少必要的精度来保存小数点后的位数。 double
,虽然并不总是保证所有数字都有7位小数,但小数点左边的位数不会超过8位,所以应该符合你的需要。
答案 3 :(得分:2)
根据我的经验,最佳设置是DOUBLE(11,8),请记住,lat / lng可以是> 99
答案 4 :(得分:0)
十进制(10,8)绰绰有余。一些GPS设备提供更准确的位置。
答案 5 :(得分:0)
改变你的表,使它成为double precision浮点数,而不是单个精度浮点数:
alter table properties modify latitude double, modify longitude double;
答案 6 :(得分:0)
使用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 ;