MySql使用Float数据类型存储地理坐标

我有一个存储经度和纬度坐标的表格(谷歌地图)我将列定义为浮点数但是当我尝试插入一个值-61.45859899999999和10.28289时,它们将四舍五入为-61.46和10.30.如何修改列以保持数据不变.

我正在使用mysql toad. Under是表的代码

CREATE TABLE `tblGeoCodes` (
  `recNo` int(11) NOT NULL AUTO_INCREMENT,`longLocation` float(30,2) DEFAULT NULL,`latLocation` float(30,2) DEFAULT NULL 
最佳答案
您的实施有两个问题.

将值四舍五入为2位精度的原因是您明确将比例定义为2.

此外,FLOAT是MysqL中不精确的数据类型.

解决这两个问题,您应该使用具有适当精度和比例的DECIMAL数据类型.

例如,像这样:

CREATE TABLE `tblGeoCodes` (
  `recNo` int(11) NOT NULL AUTO_INCREMENT primary key,`longLocation` decimal(18,14) DEFAULT NULL,`latLocation` decimal(18,14) DEFAULT NULL
); 

例:

MysqL> CREATE TABLE `tblGeoCodes` (
    ->   `recNo` int(11) NOT NULL AUTO_INCREMENT primary key,->   `longLocation` decimal(18,->   `latLocation` decimal(18,14) DEFAULT NULL
    -> ); 
Query OK,0 rows affected (0.02 sec)

MysqL> 
MysqL> insert into tblGeoCodes (longLocation,latLocation) values(-61.45859899999999,10.28289);
Query OK,1 row affected (0.00 sec)

MysqL> 
MysqL> select * from tblGeoCodes;
+-------+--------------------+-------------------+
| recNo | longLocation       | latLocation       |
+-------+--------------------+-------------------+
|     1 | -61.45859899999999 | 10.28289000000000 |
+-------+--------------------+-------------------+
1 row in set (0.00 sec)

相关文章

优化MySQL数据库发布系统存储的方法有:1.mysql库主从读写分...
使用mysql的方法:在“我的电脑”→右键→“管理”→“服务”...
在mysql中查看root用户权限的方法:1.命令行启动mysql服务;...
MySQL主从复制是用来备份一个与主数据库一样环境的从数据库,...
运行mysql的方法1.启动mysql服务,在“我的电脑”→右键→“...
开启mysql的方法1.可以通过快捷键win+r,输入cmd,打开窗口,...