MySQL выполняет математические операции над строками? - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь сохранить информацию о широте и долготе в 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 Ответ

2 голосов
/ 07 марта 2012

Вы не цитируете location, поэтому MySQL видит простой 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...