mysql - Wie wird die Abfragesuche mit Sonderzeichen / (Schrägstrich) und \ (Backslash) behandelt?

7

Ich habe eine Tabelle, in der eine Spalte Sonderzeichen wie '/' Schrägstrich und '\' Schrägstrich erlaubt.

Jetzt, wenn ich versuche, solche Aufzeichnungen von der Tabelle zu suchen, kann ich diese bekommen.

Beispiel: abc \ def oder abc / def Ich erzeuge Suchabfrage, die wie

ist %Vor%

Es gibt 0 Zeilen zurück, aber tatsächlich ist 1 Datensatz vorhanden. Wie schreibe ich eine Abfrage in diesem Fall, lass es mich wissen.

Danke.

    
JAVAC 10.05.2013, 20:28
quelle

5 Antworten

14

Barmar ist teilweise korrekt (also +1),

Also besteht der Trick darin, NUR den umgekehrten Schrägstrich zu dozieren, denn bei String-Escapes wird nur ein einziger Escape benötigt.

Zum Beispiel

  • Das einfache Zitat ' muss nur einmal entkommen LIKE '%\'%'
  • Aber um den Backslash \ abzufragen, müssen Sie den Doppelklick auf LIKE '%\\%' verdoppeln
  • Wenn Sie Backslash + singlequote \' und dann LIKE '%\\\'%' (mit 5 Backslashes) abfragen möchten

Erläuterungsquelle Auszug:

  

Weil MySQL C-Escape-Syntax in Strings verwendet (zum Beispiel "\ n" zu)   ein Newline-Zeichen darstellen), müssen Sie das von Ihnen verwendete "\" verdoppeln   in LIKE-Strings. Um beispielsweise nach "\ n" zu suchen, geben Sie es als "\ n" an.   Um nach "\" zu suchen, spezifizieren Sie es als "\\"; Dies ist, weil die   Backslashes werden einmal vom Parser und einmal vom Pattern entfernt   Die Übereinstimmung wird hergestellt, wobei ein einzelner umgekehrter Schrägstrich übrig bleibt.

    
xchiltonx 03.02.2015, 23:35
quelle
11

In MySQL funktioniert das:

%Vor%

FIDDLE

Backslash ist ein Escape-Präfix für beide Zeichenfolgen und LIKE Muster. Sie müssen es also einmal für LIKE und erneut für die String-Literalsyntax verdoppeln.

    
Barmar 10.05.2013 20:59
quelle
1

Sie müssen dem \ mit einem anderen \

entkommen %Vor%     
Explosion Pills 10.05.2013 20:31
quelle
1

Das Entfernen des LIKE -Werts funktionierte nicht, als ich es mit MySQL 5.5 probiert habe. Nach ein paar Versuchen war die Arbeit eine Regex (und ich musste dort auch flüchten, plus es in einer Zeichenklasse verstecken). Ich habe es endlich so gemacht:

%Vor%

Das hat nicht funktioniert:

%Vor%

Beachten Sie, dass dies auch als PL / SQL markiert ist, also Oracle. Die von Ihnen gepostete Abfrage funktioniert unverändert auf Oracle. Ist das PL / SQL-Tag ein Fehler?

    
Ed Gibbs 10.05.2013 20:42
quelle
0

Verwenden Sie die Escape-Funktion.

Ссылка

Tabelle 9.1. Sonderzeichen-Escape-Sequenzen

Escape Sequence Zeichen, das von Sequence dargestellt wird \ 0 Ein ASCII NUL (0x00) Zeichen.

\ 'Ein einzelnes Anführungszeichen (' '").

\ "Ein Anführungszeichen (" ").

\ b Ein Backspace-Zeichen.

\ n Ein Zeilenumbruchzeichen.

\ r Ein Wagenrücklaufzeichen.

\ t Ein Tabulatorzeichen.

\ Z ASCII 26 (Steuerung + Z). Siehe Hinweis nach der Tabelle.

\ Ein umgekehrter Schrägstrich ("\").

\% Ein "%" - Zeichen. Siehe Hinweis nach der Tabelle.

_ Ein "_" -Zeichen. Siehe Hinweis nach der Tabelle.

    
Tamas 10.05.2013 20:33
quelle

Tags und Links