MySQL での LIKE での大文字と小文字の区別
クエリ「SELECT concat_ws(title,description) as concatenated」を使用して MySQL で LIKE 検索を実行するときLIKE '%SearchTerm%';" を連結すると、テーブルが utf8_general_ci 照合順序と MyISAM ストレージ エンジンを使用してエンコードされているにもかかわらず、検索では大文字と小文字が区別されることがわかります。
この動作の理由は次のとおりです。 LIKE 演算子は、オペランドのいずれかがバイナリ文字列の場合、大文字と小文字を区別した比較を実行します。この場合、「連結」フィールドはバイナリ文字列であるため、検索では大文字と小文字が区別されます。
この問題を解決して検索で大文字と小文字を区別しないようにするには、BINARY キーワードを LIKE とともに使用することをお勧めします。演算子:
SELECT .... FROM .... WHERE `concatenated` LIKE BINARY '%SearchTerm%';
これにより、大文字と小文字の違いを無視して、文字列比較がバイナリ単位で実行されるようになります。
あるいは、COLLATE キーワードを utf8_bin 照合順序とともに使用して、 search case-insensitive:
SELECT .... FROM .... WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;
これらのメソッドは両方とも、検索動作を効果的に変更し、utf8_general_ci 照合順序のパフォーマンス上の利点を維持しながら、大文字と小文字を区別しないようにします。
以上がMySQL の LIKE 演算子でバイナリ文字列を使用するときに大文字と小文字が区別されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。