Anda menyuntikkan backslash literal. Ini cukup:
SELECT person_sname
FROM people
WHERE person_sname = 'O\'Brien'
Untuk menguji:
SELECT 'O\\\'Brien', 'O\'Brien'
Pembaruan: Sudah ada jawaban yang diterima jadi saya hanya akan menambahkan beberapa klarifikasi.
Pertama, saya telah mengabaikan fakta bahwa data yang disimpan rusak. Tak perlu dikatakan, itu menjelaskan mengapa person_sname = 'O\\\'Brien'
benar.
Kedua, \
karakter memiliki dua penggunaan dalam sintaks MySQL:
- Ini adalah karakter yang digunakan untuk menulis urutan pelarian
:
\n
,\t
... - Ini adalah karakter escape default untuk menyisipkan
%
literal dan_
karakter dalam ekspresi SUKAI :foo LIKE '%abc\%def%'
Masalahnya adalah memasukkan \
simbol dalam ekspresi LIKE memicu kedua perilaku sehingga Anda benar-benar perlu memasukkan empat garis miring terbalik untuk mendapatkan satu :
person_sname like 'O\\\\\'Brien'
... kecuali jika Anda mengubah arti kedua dengan ESCAPE
klausa:
person_sname like 'O\\\'Brien' escape '|'
Tentu saja, jika data tidak rusak, Anda cukup:
person_sname = 'O\'Brien'
person_sname like 'O\'Brien'