ホームページ >データベース >mysql チュートリアル >テーブルで utf8_general_ci を使用しているにもかかわらず、MySQL LIKE 演算子で大文字と小文字が区別されるのはなぜですか?

テーブルで utf8_general_ci を使用しているにもかかわらず、MySQL LIKE 演算子で大文字と小文字が区別されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 19:30:02524ブラウズ

Why is my MySQL LIKE operator case-sensitive even though my table uses utf8_general_ci?

MySQL における大文字と小文字の区別について

テーブルが utf8_general_ci としてエンコードされているにもかかわらず、LIKE 演算子を使用した MySQL クエリでは大文字と小文字が区別されるようですMyISAMストレージエンジンを搭載。この動作は不可解な場合があり、問題を解決するには根本的な原因を理解することが重要です。

バイナリ文字列と非バイナリ文字列の比較:

これを理解するための鍵動作は、バイナリ文字列比較と非バイナリ文字列比較の区別にあります。デフォルトでは、MySQL は非バイナリ文字列比較を実行します。これは、utf8_general_ci を含むほとんどの文字セットで大文字と小文字が区別されます。

バイナリ比較による大文字と小文字の区別の修正:

大文字と小文字の区別の問題を解決するには、バイナリ文字列比較を使用するようにクエリを変更します。これは、LIKE 演算子の右側のオペランドの先頭に BINARY キーワードを付けることで実現されます。修正されたクエリは次のようになります。

SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';

この変更により、MySQL は大文字と小文字を区別しないバイナリ文字列比較を使用するようになります。

COLLATE を使用した代替ソリューション:

大文字と小文字を区別しない文字列比較を実現する別のアプローチは、COLLATE 句を使用することです。 COLLATE 句は、文字列比較に適用される文字セットと照合規則を指定します。 utf8_bin 照合順序を指定すると、MySQL にバイナリ文字列比較の使用を強制できます。 COLLATE を使用したクエリは次のようになります:

SELECT ....
FROM ....
WHERE `concatenated` LIKE '%SearchTerm%' COLLATE utf8_bin;

以上がテーブルで utf8_general_ci を使用しているにもかかわらず、MySQL LIKE 演算子で大文字と小文字が区別されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。