Sie haben einen buchstäblichen Backslash eingefügt. Das reicht:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
Zum Testen:
SELECT 'O\\\'Brien', 'O\'Brien'
Aktualisierung: Es gibt bereits eine akzeptierte Antwort, also füge ich nur ein paar Erläuterungen hinzu.
Erstens hatte ich übersehen, dass gespeicherte Daten beschädigt waren. Das erklärt natürlich, warum person_sname = 'O\\\'Brien'
ist wahr.
Zweitens der \
Zeichen hat zwei Verwendungen in der MySQL-Syntax:
- Es ist das Zeichen, das verwendet wird, um Escape-Sequenzen
:
\n
,\t
... - Es ist das Standard-Escape-Zeichen, um das Literal
%
einzufügen und_
Zeichen in LIKE-Ausdrücken :foo LIKE '%abc\%def%'
Das Problem ist, dass das Einfügen eines \
-Symbol in einem LIKE-Ausdruck löst beide Verhaltensweisen aus, sodass Sie tatsächlich vier einfügen müssen Backslashes, um eins zu erhalten :
person_sname like 'O\\\\\'Brien'
... es sei denn, Sie ändern die zweite Bedeutung mit dem ESCAPE
Klausel:
person_sname like 'O\\\'Brien' escape '|'
Wenn die Daten nicht beschädigt wurden, können Sie natürlich einfach:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'