Es ist eine gängige Praxis in MySQL, 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.
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.
Im Gegensatz zum Gleichheitsoperator erfordert der LIKE-Operator ein zusätzlicher 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. Daher ruft die folgende Abfrage dieselbe Zeile wie die vorherige ab:
SELECT * FROM `titles` WHERE title LIKE 'test\\\\';
In dieser Abfrage die doppelten Backslashes Stellen Sie sicher, dass der einzelne Backslash im Suchbegriff wörtlich als Backslash-Zeichen interpretiert wird.
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.
MySQL ermöglicht Ihnen die Angabe eines anderen Escape-Zeichens für LIKE-Muster mit der ESCAPE-Klausel. Die folgende Abfrage verwendet beispielsweise das Pipe-Zeichen (|) als Escape-Zeichen:
SELECT * FROM `titles` WHERE title LIKE 'test\\' ESCAPE '|';
In In diesem Beispiel wird der einzelne Backslash im Suchbegriff wörtlich interpretiert, da ihm das angegebene Escape-Zeichen vorangestellt ist.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3