Dalam MySQL, aksara backslash () memainkan peranan penting dalam manipulasi rentetan. Apabila menggunakan operator yang sama (=), melarikan diri dari garis miring ke belakang adalah tidak diperlukan, tidak seperti operator LIKE, yang memerlukan garis miring ke belakang tambahan.
Pertimbangkan pertanyaan berikut:
(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
Keluaran bagi pertanyaan ini mendedahkan bahawa kedua-dua keadaan sepadan dan mengembalikan baris yang sama. Ini mungkin kelihatan berlawanan dengan intuisi kerana syarat kedua mengandungi garis serong ke belakang tambahan.
The jawapan terletak pada tingkah laku unik pengendali LIKE. Tidak seperti pengendali yang sama (=), LIKE menggunakan garis miring ke belakang sebagai aksara melarikan diri. Ini bermakna bahawa mana-mana garisan ke belakang dalam corak SUKAI mesti digandakan untuk dipadankan secara literal.
MySQL melakukan penggandaan ini dalam dua peringkat:
Oleh itu, dalam keadaan pertama (tajuk = 'ujian'), MySQL secara automatik melepaskan garisan ke belakang, menghasilkan perlawanan. Walau bagaimanapun, dalam keadaan kedua (tajuk SUKA 'ujian\'), garis miring ke belakang tambahan diperlukan kerana ia mengimbangi dua pusingan pelucutan garisan belakang.
Dalam senario tertentu, mungkin diingini untuk menggunakan watak melarikan diri yang berbeza untuk corak SUKA. Ini boleh dicapai menggunakan kata kunci ESCAPE, seperti yang ditunjukkan di bawah:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
Dengan menyatakan kata kunci ESCAPE, '|' watak menjadi watak melarikan diri dan bukannya lalai ''. Ini membolehkan anda menggunakan aksara sengkang ke belakang secara literal dalam corak SUKA tanpa perlu menggandakannya.
Atas ialah kandungan terperinci Mengapa MySQL Memerlukan Melarikan Diri untuk LIKE tetapi Bukan untuk =?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!