「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > テーブルで utf8_general_ci を使用しているにもかかわらず、MySQL LIKE 演算子で大文字と小文字が区別されるのはなぜですか?

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

2024 年 11 月 14 日公開
ブラウズ:659

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;
最新のチュートリアル もっと>

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

Copyright© 2022 湘ICP备2022001581号-3