Kouhei Sutou
kou****@clear*****
2013年 4月 25日 (木) 17:08:01 JST
須藤です。 In <CAFO8****@mail*****> "[groonga-dev,01327] mroongaで記号のエスケープしていますがエラーになってしまいます" on Thu, 25 Apr 2013 16:55:19 +0900, 須藤裕嗣 <sudo4****@gmail*****> wrote: > mroongaの3.0.1を利用しています。 > 以下のSQLを流すとエラーになってしまうのですが、どのように対応すればいいのでしょうか > > select [フィールド名] from [テーブル名] where MATCH(`message`) AGAINST('+"aa\">aa"' IN > BOOLEAN MODE); > > '+"aa\">aa"' > ここの箇所なのですが、↓の場合はエラーになりません > '+"aa\"aa"' やりたいことは「aa">aa」という文字列を検索する、ということで よいでしょうか? もうひとつ「\」を増やして '+"aa\\">aa"' とするとよいと思います。 たぶん、MySQLが「'...'」を解釈するときに「'...'」の中の「\」 を処理してしまっていて、groongaに渡るときには 「'...\"...'」 が 「'..."...'」 になっているのだと思います。なので、MySQLが解釈するときのた めにもうひとつ「\」でエスケープして 「'...\\"...'」 とすると、groongaに渡るときには 「'...\"...'」 となり、最終的に 「..."...」 と解釈されると思います。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html