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;
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3