【发布时间】: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.* FROMproductsWHERE (title LIKE '%as%' OR description LIKE '%as%') `,这非常适合我想做的事情!从实际代码来看,这似乎是一个问题。 -
如果我从我的代码库运行完全相同的代码,rails 会生成
Product Load (3.7ms) SELECTproducts.* FROMproducts` WHERE (title LIKE '%as%' OR description LIKE '%as%')` ,但返回上述错误! -
我认为 SO 弄乱了反引号,但我将这两个命令复制到 gedit 中,它们完全相同,所以我认为这一定与编码有关。我在我的 html 中添加了一个 utf8 元标记,希望可以解决问题,但它什么也没做。
-
如果有帮助,我只是查找了它所抱怨的字符代码,当一个字符未被识别时,它是典型的带有抑扬符的“A”。
标签: mysql ruby-on-rails activerecord encoding utf-8