MySQL对字符串执行数学运算?

时间:2012-03-07 03:39:15

标签: mysql sql ruby

我正在尝试在MySQL中存储纬度和经度信息。我使用Ruby来解析纬度和经度数据。它们被单独解析,然后组合成一个字符串变量。如果我有:

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

我在MySQL中有一个用于存储此数据的表,并且数据类型设置为String varchar。问题是当我将位置字符串插入表中时,MySQL执行数学运算并减去字符串中的两个数字。然后我就像Whaaaaaaaaa ??????? 因此它最终存储-31.22107作为位置。我做错了吗?

这是我正在使用的查询

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}
        )"
)

1 个答案:

答案 0 :(得分:2)

你没有引用location所以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)