Stavi iniettando una barra rovesciata letterale. Questo basta:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
Per testare:
SELECT 'O\\\'Brien', 'O\'Brien'
Aggiornamento: C'è già una risposta accettata, quindi aggiungo solo un paio di chiarimenti.
Innanzitutto, avevo trascurato il fatto che i dati archiviati erano danneggiati. Inutile dire che questo spiega perché person_sname = 'O\\\'Brien'
è vero.
Secondo, il \
carattere ha due usi nella sintassi MySQL:
- È il carattere utilizzato per comporre sequenze di escape
:
\n
,\t
... - È il carattere di escape predefinito per inserire il letterale
%
e_
caratteri in espressioni LIKE :foo LIKE '%abc\%def%'
Il problema è che si inserisce un \
il simbolo in un'espressione LIKE attiva entrambi i comportamenti, quindi è necessario inserirne quattro barre inverse per ottenerne uno :
person_sname like 'O\\\\\'Brien'
... a meno che tu non modifichi il secondo significato con ESCAPE
clausola:
person_sname like 'O\\\'Brien' escape '|'
Naturalmente, se i dati non sono stati danneggiati, puoi semplicemente:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'