開始行: * キーワード [#x05441f8] - MySQL - like - PreparedStatement - エスケープ - ワイルドカード * やりたいこと [#z892bc29] PreparedStatementを使って部分一致検索します。エスケープの... * 方法 [#t1e47ab2] SQLを次のように書きます (Javaなどコード上の文字列なので「... like concat('%', replace(replace(replace(?, '\\\\', '\\\... * 詳細 [#t236db18] ** 序 [#j44212d1] まず次の方法ではダメだということです。 like concat('%', ? '%') PreparedStatemetは「%」と「_」をエスケープしません。しか... ** 「%」と「_」に対応する [#i186cd6c] PreparedStatemetは「%」と「_」をエスケープしませんから、l... like concat('%', replace(replace(?, '%', '\\%'), '_', '\... こうすると次の文字列連結を得たことになります。 - '%' - (制御文字を単に文字として投入しつつ「%」と「_」をエスケ... - '%' すると今度は''制御文字を単に文字として投入した''「\」が l... like '%\%' になり、文字「%」で後方一致検索してしまいます。 ** 「\」に対応する [#tf035c4c] 「\」は最終的には「\\」として存在しなければなりません。先... like '%\\%' になっているべきです。そこでPreparedStatementによってエス... replace(?, '\\\\', '\\\\\\\\') 繰り返しですがJavaなどコード上の文字列なので「\」を「\\」... ** エスケープと解釈 [#ba690e9e] エスケープと解釈がどのタイミングではたらいているかを考え... * 参考 [#b7c4f9bb] - [[%(パーセント)や_(アンダーバー)の文字を検索できるよう... - [[MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.2 ... 終了行: * キーワード [#x05441f8] - MySQL - like - PreparedStatement - エスケープ - ワイルドカード * やりたいこと [#z892bc29] PreparedStatementを使って部分一致検索します。エスケープの... * 方法 [#t1e47ab2] SQLを次のように書きます (Javaなどコード上の文字列なので「... like concat('%', replace(replace(replace(?, '\\\\', '\\\... * 詳細 [#t236db18] ** 序 [#j44212d1] まず次の方法ではダメだということです。 like concat('%', ? '%') PreparedStatemetは「%」と「_」をエスケープしません。しか... ** 「%」と「_」に対応する [#i186cd6c] PreparedStatemetは「%」と「_」をエスケープしませんから、l... like concat('%', replace(replace(?, '%', '\\%'), '_', '\... こうすると次の文字列連結を得たことになります。 - '%' - (制御文字を単に文字として投入しつつ「%」と「_」をエスケ... - '%' すると今度は''制御文字を単に文字として投入した''「\」が l... like '%\%' になり、文字「%」で後方一致検索してしまいます。 ** 「\」に対応する [#tf035c4c] 「\」は最終的には「\\」として存在しなければなりません。先... like '%\\%' になっているべきです。そこでPreparedStatementによってエス... replace(?, '\\\\', '\\\\\\\\') 繰り返しですがJavaなどコード上の文字列なので「\」を「\\」... ** エスケープと解釈 [#ba690e9e] エスケープと解釈がどのタイミングではたらいているかを考え... * 参考 [#b7c4f9bb] - [[%(パーセント)や_(アンダーバー)の文字を検索できるよう... - [[MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.2 ... ページ名: