mysql有坐标类型吗_MySql使用Float数据类型来存储地理坐标

bd96500e110b49cbb3cd949968f18be7.png

I have a table that stores longitude and latitude coordinates (google maps) i have the columns defined as float however when i try to insert a value -61.45859899999999 and 10.28289 they are being rounded off to -61.46 and 10.30. How can i modify the columns to hold the data as is.

I am using mysql toad. Under is the code for the table:

CREATE TABLE `tblGeoCodes` (

`recNo` int(11) NOT NULL AUTO_INCREMENT,

`longLocation` float(30,2) DEFAULT NULL,

`latLocation` float(30,2) DEFAULT NULL

解决方案

There are two problems with your implementation.

The reason the values are both being rounded to 2 digits of precision is that you explicitly defined the scale as 2.

Also, FLOAT is an imprecise data type in MySQL.

To solve both problems you should use the DECIMAL data type with an appropriate precision and scale.

For example, something like this:

CREATE TABLE `tblGeoCodes` (

`recNo` int(11) NOT NULL AUTO_INCREMENT primary key,

`longLocation` decimal(18,14) DEFAULT NULL,

`latLocation` decimal(18,14) DEFAULT NULL

);

Example:

mysql> CREATE TABLE `tblGeoCodes` (

-> `recNo` int(11) NOT NULL AUTO_INCREMENT primary key,

-> `longLocation` decimal(18,14) DEFAULT NULL,

-> `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)


版权声明:本文为weixin_39612653原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。