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
MySQL permits a nonstandard syntax: FLOAT( M , D ) or REAL( M , D ) or DOUBLE PRECISION( M , D ) . Here, ( M , D ) means than values can be stored with up to M digits in total, of which D digits may be after the decimal point. For example, a column defined as FLOAT(7,4) is displayed as -999.9999 .
precision you should use DECIMAL . Latitudes range from -90 to +90 (degrees), so DECIMAL(10,8) is ok for that, but longitudes range from -180 to +180 (degrees) so you need DECIMAL(11,8) .
Latitude and Longitude should use DECIMAL datatype instead of FLOAT #4923.
Storing Latitude & Longitude data as Floats or Decimal This is one of the most fundamental ways of storing geocoordinate data. Latitude & longitude values can be represented & stored in a SQL database using decimal points (Decimal degrees) rather than degrees (or Degrees Minutes Seconds).
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)
The ,2
in float(30,2)
represents 2 decimal places. I use float(10,6)
as this is adequate to hold coordinates
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With