2016-04-19 18 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(ASCII-8BITから "UTF-8"への "\ xC2"): が返されます。私がこのエスケープをする方法や、私のどこのクエリでこれを行う方法がありますか?

+0

このコマンドをレールコンソールで実行すると、生成された同等のsqlコマンドをここでコメントできますか?ありがとうございました –

+0

私はコンソールでこれを取得します: 'Product Load(142.3ms)SELECT' products'。* FROM 'products' WHERE(タイトルはLIKE '%as%' OR説明LIKE '%as%') '私は何をしたいのですか?それは実際のコードからの問題になるだけです。 – Silvertail

+0

コードベースから全く同じコードを実行すると、レールは 'Product Load(3.7ms)SELECT'製品 'を生成します。* FROM' products' WHERE(タイトルは%OR%LIKE '%as%') '、しかし、上記のエラーで戻ってくる! – Silvertail

答えて

0

「冒険」のエンディングの後、私のデータベースに「インポート」していたファイルに、utf8とascii互換ではない文字列が含まれているという問題が判明しました。

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

今私は、データベース内のすべてが正しくエンコードされていることを確認することができ、検索は以下となります。私は私のデータベースに文字列を追加するために使用していた機能では、私は私のデシベルに入るから、これらの文字を維持するためにこれを使用しましたRailsがエンコーディングの理由で処理できない結果を返しません!

選択肢は次のようになります。

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

この代替が私のために動作しませんでしたが、いくつかのルビー/レールのバージョンでも動作します。

+0

あなたはそれがすべてうまくいったことをうれしく思っています:)申し訳ありません、私はあなたにもう助けになっていません。 –

関連する問題