Reputation: 5654
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
Upvotes: 5
Views: 10254
Reputation: 154553
Bare in mind that FLOAT(10,6)
makes no sense, this reserves 4 digits for the integer part.
Personally, I prefer DOUBLE(9,6)
but you might use FLOAT
instead to save the 4 extra bytes.
Upvotes: 0
Reputation: 65547
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)
Upvotes: 13
Reputation: 8642
I'd suggest converting to MYISAM to take advantage of GSI. It is better suited for that purpose and should perform better.
However, as already suggested, increasing precision of float fields might be a simpler solution. Since you're tagged the question as google-maps releted I'd also recommend this tutorial at Google's dev site.
Upvotes: 0
Reputation: 7228
The ,2
in float(30,2)
represents 2 decimal places. I use float(10,6)
as this is adequate to hold coordinates
Upvotes: 5