【问题标题】:Rails LIKE query using mysql使用 mysql 的 Rails LIKE 查询
【发布时间】:2016-08-12 03:54:47
【问题描述】:

我正在尝试执行 Like 查询匹配子字符串。我以前用过这个:

products = Product.where("title LIKE ? OR description LIKE ?", "%#{params[:s_term]}%", "%#{params[:s_term]}%")

这与 sqlite3 配合得很好(现在不担心 sql 注入)。 但是,我刚刚切换到 mysql,当我执行查询时,它抱怨 Encoding::UndefinedConversionError ("\xC2" from ASCII-8BIT to UTF-8): 因为查询中的“%”。有没有办法让我在 where 查询中逃避这种情况或采取不同的方式?

【问题讨论】:

  • 当你在rails控制台执行这个命令的时候,能不能在这里注释一下它生成的等效sql命令?谢谢
  • 我在控制台中得到这个:` Product Load (142.3ms) SELECT products.* FROM products WHERE (title LIKE '%as%' OR description LIKE '%as%') `,这非常适合我想做的事情!从实际代码来看,这似乎是一个问题。
  • 如果我从我的代码库运行完全相同的代码,rails 会生成 Product Load (3.7ms) SELECT products.* FROM products` WHERE (title LIKE '%as%' OR description LIKE '%as%')` ,但返回上述错误!
  • 我认为 SO 弄乱了反引号,但我将这两个命令复制到 gedit 中,它们完全相同,所以我认为这一定与编码有关。我在我的 html 中添加了一个 utf8 元标记,希望可以解决问题,但它什么也没做。
  • 如果有帮助,我只是查找了它所抱怨的字符代码,当一个字符未被识别时,它是典型的带有抑扬符的“A”。

标签: mysql ruby-on-rails activerecord encoding utf-8


【解决方案1】:

在对“冒险”进行编码之后,问题原来是我“导入”到我的数据库的文件包含不兼容 utf8 和 ascii 的字符串(问题特别是这个字符:Â)。在我用来将字符串添加到数据库的函数中,我用它来防止这些字符进入我的数据库:

thestring.gsub(/\P{ASCII}/, '').encode('utf-8')

现在我可以确定我的数据库中的所有内容都已正确编码,并且搜索不会返回 rails 因编码原因无法处理的结果!

另一种可能是:

thestring.delete!("^\u{0000}-\u{007F}").encode('utf-8')

这种替代方法对我不起作用,但可能适用于某些 ruby​​/rails 版本。

【讨论】:

  • 我很高兴你把这一切都解决了 :) 很抱歉我没有为你提供更多帮助。
猜你喜欢
  • 2010-11-26
  • 2012-06-20
  • 2013-05-27
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 2014-10-18
  • 2015-01-14
相关资源
最近更新 更多