我正在尝试执行 Like 查询匹配子字符串。我以前用过这个:
products = Product.where("title LIKE ? OR description LIKE ?", "%#{params[:s_term]}%", "%#{params[:s_term]}%")
它与 sqlite3 配合得很好(现在不用担心 sql 注入(inject))。 但是,我刚切换到 mysql,当我执行查询时,它提示 Encoding::UndefinedConversionError(“\xC2”从 ASCII-8BIT 到 UTF-8): 因为查询中的“%”。有没有办法让我在我的 where 查询中逃避这个或以不同的方式执行此操作?
最佳答案
在对“冒险”进行大量编码之后,问题出在我“导入”到我的数据库中的文件包含与 utf8 和 ascii 不兼容的字符串(问题特别出在这个字符:Â)。在我用来将字符串添加到我的数据库的函数中,我用它来防止这些字符进入我的数据库:
thestring.gsub(/\P{ASCII}/, '').encode('utf-8')
现在我可以确定我数据库中的所有内容都已正确编码,并且搜索不会返回 Rails 因编码原因无法处理的结果!
替代方案可能是:
thestring.delete!("^\u{0000}-\u{007F}").encode('utf-8')
此替代方法对我不起作用,但可能适用于某些 ruby/rails 版本。
关于mysql - 使用 mysql 的 Rails LIKE 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36727388/