Heim  >  Artikel  >  Backend-Entwicklung  >  Warum benötigt MySQL doppelte Backslashes, um einem Backslash in LIKE-Abfragen zu entkommen, aber nicht in Equals (=)-Abfragen?

Warum benötigt MySQL doppelte Backslashes, um einem Backslash in LIKE-Abfragen zu entkommen, aber nicht in Equals (=)-Abfragen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 05:22:02530Durchsuche

Why Does MySQL Require Double Backslashes to Escape a Backslash in LIKE Queries But Not in Equals (=) Queries?

Grundlegendes zum Slash()-Escape von MySQL in Abfragen

In MySQL ist es üblich, Sonderzeichen, einschließlich des Backslash(), zu maskieren. , in Abfragen, um Interpretationskonflikte zu vermeiden. Beim Vergleich des Verhaltens des Gleichheitsoperators (=) und des LIKE-Operators in Bezug auf den Backslash tritt jedoch eine merkwürdige Anomalie auf.

Der Gleichheitsoperator (=)

Im Fall des Gleichheitsoperators ist kein zusätzlicher Backslash erforderlich, um den Backslash innerhalb des Suchbegriffs zu maskieren. Die folgende Abfrage ruft beispielsweise die Zeile ab, in der die Titelspalte den Wert „test“ enthält.

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

Der MySQL-Parser interpretiert den Backslash im Suchbegriff automatisch als Literalzeichen, daher der erfolgreiche Abruf.

Der LIKE-Operator

Im Gegensatz zum Gleichheitsoperator erfordert der LIKE-Operator einen zusätzlichen Backslash, um den Backslash im Suchbegriff zu maskieren. Dies liegt daran, dass der LIKE-Operator einen Mustervergleich durchführt und der Backslash in SQL standardmäßig als Escape-Zeichen fungiert. Somit ruft die folgende Abfrage dieselbe Zeile wie die vorherige ab:

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

In dieser Abfrage stellen die doppelten Backslashes sicher, dass der einzelne Backslash im Suchbegriff wörtlich als Backslash-Zeichen interpretiert wird.

Erklärung

Der Grund für dieses Verhalten liegt in der Art und Weise, wie MySQL LIKE-Muster verarbeitet. Der Parser entfernt zunächst die Backslashes aus dem Suchbegriff. Beim anschließenden Mustervergleich werden die Backslashes jedoch wieder entfernt. Dadurch bleibt ein einzelner Backslash übrig, der mit dem Muster abgeglichen werden muss. Um sicherzustellen, dass der Backslash als Literalzeichen behandelt wird, ist der zusätzliche Backslash erforderlich.

Ändern des Escape-Zeichens

MySQL ermöglicht Ihnen die Angabe eines anderen Escape-Zeichens Zeichen für LIKE-Muster mithilfe der ESCAPE-Klausel. Die folgende Abfrage verwendet beispielsweise das Pipe-Zeichen (|) als Escape-Zeichen:

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

In diesem Beispiel wird der einzelne Backslash im Suchbegriff wörtlich interpretiert, da ihm das angegebene Escape-Zeichen vorangestellt ist .

Das obige ist der detaillierte Inhalt vonWarum benötigt MySQL doppelte Backslashes, um einem Backslash in LIKE-Abfragen zu entkommen, aber nicht in Equals (=)-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn