5

経度と緯度の座標 (Google マップ) を格納するテーブルがあります。フロートとして定義された列がありますが、値 -61.45859899999999 と 10.28289 を挿入しようとすると、-61.46 と 10.30 に丸められます。データをそのまま保持するように列を変更するにはどうすればよいですか。

私はmysql toadを使用しています。以下は、テーブルのコードです。

CREATE TABLE `tblGeoCodes` (
  `recNo` int(11) NOT NULL AUTO_INCREMENT,
  `longLocation` float(30,2) DEFAULT NULL,
  `latLocation` float(30,2) DEFAULT NULL 
4

4 に答える 4

13

実装には 2 つの問題があります。

値が両方とも 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,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)
于 2013-04-08T18:35:18.627 に答える
5

,2in はfloat(30,2)小数点以下 2 桁を表します。float(10,6)これは座標を保持するのに十分なので使用します

于 2013-04-08T18:37:25.887 に答える
0

意味がないことに注意してFLOAT(10,6)ください。これにより、整数部分に4桁が予約されます。

個人的には好みですが、代わりに 4 バイトを節約するためにDOUBLE(9,6)使用することもできます。FLOAT

于 2013-05-09T09:52:23.347 に答える
0

GSIを利用するには MYISAM に変換することをお勧めします。その目的により適していて、パフォーマンスが向上するはずです。

ただし、すでに示唆されているように、float フィールドの精度を上げることは、より簡単な解決策になる可能性があります。質問に google-maps releted のタグが付けられているので、Google の開発サイトでこのチュートリアルもお勧めします。

于 2013-04-08T18:28:29.537 に答える