Heim >Datenbank >MySQL-Tutorial >Warum erfordert MySQL das Backslash-Escape für LIKE, aber nicht für =?
In MySQL das Backslash ()-Zeichen spielt eine entscheidende Rolle bei der String-Manipulation. Bei Verwendung des Gleichheitsoperators (=) ist das Escapezeichen des Backslashs nicht erforderlich, im Gegensatz zum LIKE-Operator, bei dem ein zusätzlicher Backslash erforderlich ist.
Betrachten Sie die folgende Abfrage:
(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
Die Ausgabe von Diese Abfrage zeigt, dass beide Bedingungen übereinstimmen und dieselbe Zeile zurückgeben. Dies mag kontraintuitiv erscheinen, da die zweite Bedingung einen zusätzlichen Backslash enthält.
Das Die Antwort liegt im einzigartigen Verhalten des LIKE-Operators. Im Gegensatz zum Gleichheitsoperator (=) verwendet LIKE Backslashes als Escape-Zeichen. Das bedeutet, dass jeder Backslash in einem LIKE-Muster verdoppelt werden muss, um wortwörtlich gefunden zu werden.
MySQL führt diese Verdoppelung in zwei Schritten durch:
Daher maskiert MySQL in der ersten Bedingung (title = 'test') automatisch den Backslash, was zu einer Übereinstimmung führt. In der zweiten Bedingung (Titel LIKE 'test\') ist der zusätzliche Backslash jedoch erforderlich, da er die zwei Runden des Backslash-Strippings kompensiert.
In bestimmten Szenarien kann es wünschenswert sein, ein anderes Escape-Zeichen für LIKE-Muster zu verwenden. Dies kann mit dem Schlüsselwort ESCAPE erreicht werden, wie unten gezeigt:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
Durch Angabe des Schlüsselworts ESCAPE wird das '|' Das Zeichen wird zum Escape-Zeichen anstelle des Standardzeichens ''. Dadurch können Sie das Backslash-Zeichen buchstäblich in LIKE-Mustern verwenden, ohne es verdoppeln zu müssen.
Das obige ist der detaillierte Inhalt vonWarum erfordert MySQL das Backslash-Escape für LIKE, aber nicht für =?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!