ホームページ >データベース >mysql チュートリアル >MySQL では、LIKE にはバックスラッシュ エスケープが必要ですが、= には必要ないのはなぜですか?
MySQL では、バックスラッシュ () 文字文字列操作において重要な役割を果たします。等号 (=) 演算子を使用する場合、追加のバックスラッシュが必要な LIKE 演算子とは異なり、バックスラッシュをエスケープする必要はありません。
次のクエリを考えてみましょう。
(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
の出力このクエリでは、両方の条件が一致し、同じ行が返されることがわかります。 2 番目の条件には余分なバックスラッシュが含まれているため、これは直感に反するように思えるかもしれません。
答えは、LIKE 演算子の独特の動作にあります。等号 (=) 演算子とは異なり、LIKE はエスケープ文字としてバックスラッシュを使用します。これは、LIKE パターン内のバックスラッシュを文字どおり一致させるには 2 倍にする必要があることを意味します。
MySQL は、この 2 倍化を 2 段階で実行します。
したがって、最初の条件 (title = 'test') では、MySQL は自動的にバックスラッシュをエスケープし、一致します。ただし、2 番目の条件 (タイトル LIKE 'test\') では、2 ラウンドのバックスラッシュ除去を補うため、追加のバックスラッシュが必要です。
特定のシナリオでは、LIKE パターンに別のエスケープ文字を使用することが望ましい場合があります。これは、次に示すように ESCAPE キーワードを使用して実現できます。
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
ESCAPE キーワードを指定すると、'|'文字は、デフォルトの '' の代わりにエスケープ文字になります。これにより、バックスラッシュ文字を 2 重にすることなく、文字通り LIKE パターンで使用できるようになります。
以上がMySQL では、LIKE にはバックスラッシュ エスケープが必要ですが、= には必要ないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。