在mysql查询中字符串内的连字符导致奇怪的行为

时间:2012-07-13 17:23:28

标签: mysql sql ruby-on-rails database

在我的Rails测试环境中,我有user_id,看起来像1234-567abc89。通过在不同的表中查询此用户,我得到了不一致的行为。大多数查询都有效,但运行一个特定查询失败:

ActiveRecord::StatementInvalid (Mysql::Error: Unknown column '1234' in 
'where clause': SELECT * FROM `point_allocations` WHERE (user_id = 1234-567abc89) ):

因此,出于某种原因,连字符之外的所有内容都会被切断。我意识到,对于有效的查询,它正在查找用户1234而不是1234-567abc89,但如果其他所有其他工作,那么任何想法只会导致此错误返回错误?

1 个答案:

答案 0 :(得分:5)

您需要包含报价。

SELECT * FROM `point_allocations` WHERE (user_id = '1234-567abc89')

因为user_id列需要字符类型的数据,所以它将获取您的值(1234-567abc89)并将其解析为整数,截断连字符后的内容。如果将其包含在引号中,则会将其作为字符串接受并正确传输。

享受并祝你好运!