MySQLのLIKE句で「ほげ」を含む文字列を検索したい場合、以下のように書く。
SELECT * FORM items WHERE name LIKE '%ほげ%'
MySQLのLIKE句はデフォルトでバックスラッシュがLIKE句のエスケープ文字なので、バックスラッシュを含む文字列検索したい場合は二重にエスケープして以下のように書く。
SELECT * FROM items WHERE name LIKE '%\\\\%'
……のだが、utf8_unicode_ciなどの照合順序で検索した場合、このクエリはバックスラッシュにマッチしないバグが報告されている。
MySQL Bugs: #63829: Search containig backslash doesn't work if field collation is utf8_unicode_ci
手元で確認したところ、このバグはまだ修正されていない。
ワークアラウンド
エスケープ文字を別の文字で置き換える
SELECT * FROM items WHERE name LIKE '%\\%' ESCAPE '$'
この場合、バックスラッシュの代わりにドル記号が検索できなくなる。
CHARINDEXを使う
SELECT * FROM items WHERE CHARINDEX('\\', name) > 0
この場合、「含む文字列」以外のマッチングはできなくなる。