ホームページ >データベース >mysql チュートリアル >MySQL では、LIKE クエリではバックスラッシュをエスケープする必要があるのに、等価クエリではバックスラッシュをエスケープする必要がないのはなぜですか?

MySQL では、LIKE クエリではバックスラッシュをエスケープする必要があるのに、等価クエリではバックスラッシュをエスケープする必要がないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-06 21:50:43350ブラウズ

Why Does MySQL Require Escaping Backslashes in LIKE Queries But Not in Equality Queries?

MySQL 検索でのスラッシュの処理: エスケープの謎を解明する

MySQL LIKE 検索でスラッシュ () を扱う場合、エスケープは考慮すべき重要な要素になります。この記事では、等価 (=) 比較ではなく、LIKE 比較にはエスケープが必要な理由を詳しく掘り下げ、包括的な説明と解決策を提供します。

等価比較 (WHERE =)

等価比較 (=) が使用される WHERE 句では、パーサーがバックスラッシュを明示的に解釈するため、バックスラッシュをエスケープする必要はありません。文字列。したがって、次のクエリは、タイトル値「test」を含む行と正常に一致します。

SELECT * FROM `titles` WHERE title = 'test\'

LIKE Comparison (WHERE LIKE)

ただし、演算子と同様に、バックスラッシュ文字はエスケープ文字として特別な意味を持ちます。デフォルトでは、MySQL は C エスケープ構文を使用して LIKE パターンを解析します。これには、パターンで使用されているバックスラッシュを 2 倍にする必要があります。

提供された例では:

SELECT * FROM `titles` WHERE title LIKE 'test\\'

最初のバックスラッシュ () は、エスケープ シーケンスの始まり、2 番目のバックスラッシュ (`) は、一致するリテラルのバックスラッシュ文字を表します。 2 番目のバックスラッシュが省略された場合、MySQL はバックスラッシュをエスケープ シーケンスの一部として解釈し、タイトル内の実際のバックスラッシュと一致できません。

等価にはエスケープが必要ないが、LIKE にはエスケープが必要な理由

等価 (=) 比較と LIKE 比較の動作の違いは、パーサーがバックスラッシュを解釈するという事実から生じます。それぞれのコンテキストで異なります。等価性の場合、パーサーはバックスラッシュを文字列内のリテラル文字として認識しますが、LIKE の場合、バックスラッシュを特殊記号を示すために使用できるエスケープ文字として認識します。

エスケープ文字の変更

デフォルトのエスケープ構文がユースケースに適さない場合は、次を使用して代替エスケープ文字を指定できます。 ESCAPE 句。たとえば、次のクエリではエスケープ文字としてパイプ文字 (|) が使用されています:

SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'

MySQL LIKE 検索におけるバックスラッシュ処理の微妙な違いを理解することで、潜在的な落とし穴を回避し、クエリを正確に実行できます。

以上がMySQL では、LIKE クエリではバックスラッシュをエスケープする必要があるのに、等価クエリではバックスラッシュをエスケープする必要がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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