LoginSignup
1
1

More than 5 years have passed since last update.

MySQLにはunicode_ci照合順序においてバックスラッシュを含む文字列を検索できないバグがある

Last updated at Posted at 2016-03-02

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

この場合、「含む文字列」以外のマッチングはできなくなる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1