Adalah amalan biasa dalam MySQL untuk melepaskan aksara khas, termasuk backslash () , dalam pertanyaan untuk mengelakkan konflik tafsiran. Walau bagaimanapun, anomali yang ingin tahu timbul apabila membandingkan kelakuan pengendali sama (=) dan pengendali LIKE berkaitan dengan garis miring ke belakang.
Dalam kes pengendali equals, tiada garis miring ke belakang tambahan diperlukan untuk melepaskan garis miring ke belakang dalam istilah carian. Sebagai contoh, pertanyaan berikut mendapatkan semula baris di mana lajur tajuk mengandungi nilai "ujian".
SELECT * FROM `titles` WHERE title = 'test\';
Penghurai MySQL secara automatik mentafsir garis serong ke belakang dalam istilah carian sebagai aksara literal, oleh itu pengambilan semula berjaya.
Berbeza dengan pengendali yang sama, pengendali LIKE memerlukan garis miring ke belakang tambahan untuk melepaskan garis miring ke belakang dalam istilah carian. Ini kerana pengendali LIKE melakukan padanan corak, dan garis miring ke belakang bertindak sebagai watak melarikan diri secara lalai dalam SQL. Oleh itu, pertanyaan berikut mendapatkan semula baris yang sama seperti yang sebelumnya:
SELECT * FROM `titles` WHERE title LIKE 'test\\';
Dalam pertanyaan ini, garis serong ke belakang berganda memastikan bahawa garis serong ke belakang tunggal dalam istilah carian ditafsirkan secara literal sebagai aksara sengkang ke belakang.
Sebab di sebalik tingkah laku ini berakar pada cara MySQL memproses corak LIKE. Penghurai pada mulanya menanggalkan garis miring ke belakang daripada istilah carian. Walau bagaimanapun, apabila padanan corak dilakukan kemudiannya, garis miring ke belakang dikeluarkan sekali lagi. Ini meninggalkan satu garis miring ke belakang untuk dipadankan dengan corak. Untuk memastikan bahawa garis miring ke belakang dianggap sebagai aksara literal, garis miring ke belakang tambahan diperlukan.
MySQL membolehkan anda menentukan melarikan diri yang berbeza aksara untuk corak SUKA menggunakan klausa ESCAPE. Sebagai contoh, pertanyaan berikut menggunakan aksara paip (|) sebagai aksara melarikan diri:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|';
Dalam contoh ini, garisan ke belakang tunggal dalam istilah carian ditafsirkan secara literal kerana ia didahului oleh aksara melarikan diri yang ditentukan .
Atas ialah kandungan terperinci Mengapakah MySQL Memerlukan Garis Segaris Belakang Berganda untuk Meloloskan Garis Segaris Belakang dalam Pertanyaan SEPERTI Tetapi Tidak dalam Pertanyaan Sama (=)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!