2012-03-07 13 views
0

MySQLに緯度と経度の情報を格納しようとしています。私は緯度と経度のデータを解析するためにRubyを使用しています。それらは別々に解析され、文字列変数に結合されます。だから私が持っている場合:MySQLは文字列に対して数学演算を実行しますか?

latitude = 43.78219.to_s 
longitude = -75.00326.to_s 
location = latitude + " " + longitude # => "43.78219 -75.00326" 

このデータを格納するためにMySQLにテーブルがあり、データ型はString varcharに設定されています。問題は、テーブルに位置文字列を挿入すると、MySQLは数値演算を実行し、文字列内の2つの数値を減算することです。それから私はWhaaaaaaaaa ??????? これで、-31.22107が場所として保存されます。私は何か間違っているのですか?ここで

は、私はあなたがlocationを引用していない

db.query("insert into StationCapacityStatus 
     (city_id, station_id, location, empty_docks, nonempty_docks, timestamp) 
     values(
      23, 
      #{$station_number}, 
      #{location}, 
      #{$empty_docks}, 
      #{$nonempty_docks}, 
      #{$datetime} 
     )" 
) 
+0

は、あなたがそれを保存するために使用しているクエリを追加します。データベース。それは引用符ではない場合、それは方程式としてそれをピックアップしている可能性があります。 – judda

+4

私はそれらを別々の列にとにかく保管します。 – pbond

+0

@juddaちょうど私が使用していたクエリを追加しました。 –

答えて

2

を使用しているクエリはそうMySQLのは、VALUES内部プレーン43.78219 -75.00326を見て、浮動小数点表現として解釈されます。あなたは適切にも、文字列をエスケープするquoteメソッドを使用する必要があります。

db.query("insert into StationCapacityStatus 
    (city_id, station_id, location, empty_docks, nonempty_docks, timestamp) 
    values(
     23, 
     #{$station_number}, 
     '#{db.quote(location)}', 
     #{$empty_docks}, 
     #{$nonempty_docks}, 
     #{$datetime} 
    )" 
) 

可能であればあなたはまた、バインドされた値を使用して準備された文に切り替える必要があります。

sth = db.prepare('insert into StationCapacityStatus (city_id, station_id, location, empty_docks, nonempty_docks, timestamp) values (?, ?, ?, ?, ?, ?)') 
sth.execute(23, $station_number, location, $empty_docks, $nonempty_docks, $datetime) 
+0

ありがとうございます。 –

+0

@icanc:あなたは大歓迎です。別々の列(と 'db.prepare')は良い計画です。 –

関連する問題