2016-04-19 150 views
1

我想要做一個Like查詢匹配子字符串。我以前使用過這個:Rails LIKE查詢使用mysql

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

它與sqlite3(不擔心現在的SQL注入)很好地工作。 但是,我只是切換到mysql,並且當我執行查詢時,由於查詢中的'%',它會對Encoding :: UndefinedConversionError(「\ xC2」從ASCII-8BIT轉換爲UTF-8)提出異議: 。有沒有辦法讓我逃避這一點,或者在我的查詢中以不同的方式執行此操作?

+0

當您在rails控制檯中執行此命令時,您可以在這裏評論它生成的等效sql命令嗎?謝謝 –

+0

我在控制檯得到了這個:'Product Load(142.3ms)SELECT'products'。* FROM'products' WHERE(title LIKE'%as%'或description LIKE'%as%') '爲了我想要做的事情!它只是接近實際代碼中的一個問題。 – Silvertail

+0

如果我從我的代碼庫運行完全相同的代碼,rails會生成'Product Load(3.7ms)SELECT'products'。* FROM'products' WHERE(title LIKE'%as%'或description LIKE'%as%') ',但回到上面提到的錯誤! – Silvertail

回答

0

在編碼爲「冒險」後,結果問題是我向數據庫「導入」的文件包含的字符串不是utf8和ascii兼容的(問題特別是這個字符:)。在我使用的字符串添加到我的數據庫的功能,我用這種方式來保持這些字符從進入我的DB:

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

現在,我可以肯定的是一切都在我的數據庫正確編碼器和搜索就不會返回導致編碼原因無法處理的結果!

另一種可能是:

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

這種替代並沒有爲我工作,但可能與一些紅寶石工作/導軌版本。

+0

林高興你知道這一切工作:)對不起,我沒有任何更多的幫助給你。 –