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

MySQL では、LIKE にはバックスラッシュ エスケープが必要ですが、= には必要ないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-06 21:04:41900ブラウズ

Why Does MySQL Require Backslash Escaping for LIKE but Not for =?

MySQL でのバックスラッシュのエスケープ: 等号 (=) 演算子と LIKE 演算子の違いを解明する

MySQL では、バックスラッシュ () 文字文字列操作において重要な役割を果たします。等号 (=) 演算子を使用する場合、追加のバックスラッシュが必要な LIKE 演算子とは異なり、バックスラッシュをエスケープする必要はありません。

次のクエリを考えてみましょう。

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

の出力このクエリでは、両方の条件が一致し、同じ行が返されることがわかります。 2 番目の条件には余分なバックスラッシュが含まれているため、これは直感に反するように思えるかもしれません。

(=) にはエスケープが必要ないのに、LIKE にはエスケープが必要なのはなぜですか?

gt;

答えは、LIKE 演算子の独特の動作にあります。等号 (=) 演算子とは異なり、LIKE はエスケープ文字としてバックスラッシュを使用します。これは、LIKE パターン内のバックスラッシュを文字どおり一致させるには 2 倍にする必要があることを意味します。

MySQL は、この 2 倍化を 2 段階で実行します。

  • パーサーによって 1 回、バックスラッシュが 1 つ削除されます。
  • パターンの照合が行われるときも、バックスラッシュを 1 つ残して照合します。 string.

したがって、最初の条件 (title = 'test') では、MySQL は自動的にバックスラッシュをエスケープし、一致します。ただし、2 番目の条件 (タイトル LIKE 'test\') では、2 ラウンドのバックスラッシュ除去を補うため、追加のバックスラッシュが必要です。

LIKE パターン用のカスタム エスケープ文字

特定のシナリオでは、LIKE パターンに別のエスケープ文字を使用することが望ましい場合があります。これは、次に示すように ESCAPE キーワードを使用して実現できます。

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

ESCAPE キーワードを指定すると、'|'文字は、デフォルトの '' の代わりにエスケープ文字になります。これにより、バックスラッシュ文字を 2 重にすることなく、文字通り LIKE パターンで使用できるようになります。

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

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