ホームページ >データベース >mysql チュートリアル >バックスラッシュのエスケープが MySQL の WHERE 句と LIKE 句で異なるのはなぜですか?

バックスラッシュのエスケープが MySQL の WHERE 句と LIKE 句で異なるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-06 21:55:45981ブラウズ

Why Does Escaping Backslashes Differ Between MySQL's WHERE and LIKE Clauses?

MySQL の WHERE 句および LIKE 句のエスケープ文字

MySQL では、WHERE 句内のバックスラッシュ () などの特殊文字を検索するときに、追加のエスケープは必要ありません。ただし、LIKE 句の場合は、二重バックスラッシュ () が必要です。これは、MySQL が LIKE ステートメントのエスケープ文字としてデフォルトで使用するためです。

WHERE および LIKE でエスケープ文字が機能する理由と仕組みを理解する

WHERE 句では、MySQLそれ以上の処理を行わずに、指定された値を列の値と直接比較します。したがって、列内のバックスラッシュ文字と一致するには、単一のバックスラッシュ () で十分です。

LIKE 句では、MySQL はまず、指定されたパターンからバックスラッシュをすべて削除します。次に、パターン マッチング プロセス中に、残りのバックスラッシュが削除されます。この二重の削除プロセスでは、バックスラッシュ文字をエスケープし、LIKE 句で一致できるようにするために、二重のバックスラッシュ () が必要です。

提供された SQL クエリは次のとおりです。の違い:

(SELECT * FROM `titles` WHERE title = 'test\')
UNION ALL
(SELECT * FROM `titles` WHERE title LIKE 'test\\')

出力:

| ID | TITLE |
--------------
| 1 | test\ |
| 1 | test\ |

列値のバックスラッシュと一致するには、LIKE 句で二重バックスラッシュ () が必要です。

エスケープ文字の変更

必要に応じて、エスケープ文字を変更できます。 ESCAPE キーワードの後に​​目的の文字を指定することで、LIKE ステートメントで使用されます:

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

この場合、パイプ (|) がエスケープ文字として使用され、単一のバックスラッシュ () が一致するようになります。 LIKE 句。

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

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