Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL对字符串执行数学操作?_Mysql_Sql_Ruby - Fatal编程技术网

MySQL对字符串执行数学操作?

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。问题是,当我将位置字符串插入表中时,

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

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
)是一个很好的计划。