MySQL对字符串执行数学操作?
我试图在MySQL中存储纬度和经度信息。我正在使用Ruby解析纬度和经度数据。它们被单独解析,然后组合成一个字符串变量。因此,如果我有:MySQL对字符串执行数学操作?,mysql,sql,ruby,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。问题是,当我将位置字符串插入表中时,
latitude = 43.78219.to_s
longitude = -75.00326.to_s
location = latitude + " " + longitude # => "43.78219 -75.00326"
我在MySQL中有一个表来存储这些数据,数据类型设置为String varchar。问题是,当我将位置字符串插入表中时,MySQL执行一个数学运算并减去字符串中的两个数字。那我就像什么???????
因此它最终存储-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}
)"
)
您没有引用
位置
,因此MySQL在值中看到一个普通的43.78219-75.00326
,并将其解释为浮点表达式。还应使用方法正确转义字符串:
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)
添加用于将其保存到数据库的查询。很可能,如果它不在引号中,那么它就是把它作为一个等式来提取的。无论如何,我会将它们存储在不同的列中。@judda刚刚添加了我使用的查询。我同意peterbond的观点。把它们分开更合乎逻辑。我对ruby不够了解,不知道如何更改查询的语法,所以我将把它留给其他人。我想我必须采用两列的方式来减少头痛。谢谢。@icanc:不客气,单独列(和
db.prepare
)是一个很好的计划。