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'