MySQL LIKE クエリにおける大文字と小文字の区別
問題:
次の MySQL について考えてみましょう。 query:
SELECT concat_ws(title, description) as concatenated HAVING concatenated LIKE '%SearchTerm%';
LIKE 演算子を使用しているにもかかわらず、MyISAM ストレージ エンジンでテーブル エンコーディングが utf8_general_ci の場合、検索では大文字と小文字が区別されるようです。
説明:
MyISAM ストレージ エンジンは、以下に格納されている文字列に対して大文字と小文字を区別しない比較を使用します。 utf8_general_ci エンコーディング。ただし、LIKE 演算子は、デフォルトで大文字と小文字を区別した比較を実行します。
最適な解決策:
大文字と小文字を区別しない比較を実行するには、次のように BINARY キーワードを使用します。
SELECT .... FROM .... WHERE `concatenated` LIKE BINARY '%SearchTerm%';
オペランドの 1 つがバイナリの場合、文字列の比較では大文字と小文字が区別されます。 string.
代替解決策:
または、COLLATE ステートメントを使用してロケール固有の照合順序を指定します:
SELECT .... FROM .... WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;
このアプローチでは、次のことが可能になります。元の文字エンコーディングを維持しながら、大文字と小文字を区別しない比較。
以上がMySQL LIKE クエリが utf8_general_ci エンコーディングで大文字と小文字を区別するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。