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'