Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Memerlukan Melarikan Diri Berganda untuk Garis Sentak Belakang dalam Pertanyaan SEPERTI tetapi Bukan dalam Perbandingan Kesaksamaan?
MySQL Escape Character and LIKE Operator: Mengapa Double Escaping untuk ''
Pertimbangkan pertanyaan MySQL berikut:
(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
Hasilnya menunjukkan bahawa kedua-dua pertanyaan berjaya memadankan baris dengan tajuk 'ujian', walaupun garis miring ke belakang tambahan ditambah dalam LIKE klausa ('ujian\'). Tingkah laku ini menimbulkan persoalan: mengapakah tanda sengkang terbalik () tambahan diperlukan untuk pengendali LIKE tetapi bukan untuk pengendali = (sama)?
Escaping '' dalam String Literals
MySQL menggunakan aksara ('') sebagai aksara melarikan diri dalam rentetan. Ia menandakan watak berikut mempunyai makna yang istimewa. Dalam 'ujian' literal, garis miring ke belakang melarikan diri daripada aksara garisan belakang itu sendiri, menghasilkan 'ujian' sebagai rentetan sebenar. Tingkah laku ini konsisten dengan kebanyakan bahasa pengaturcaraan dan pelaksanaan SQL.
LIKE Operator dan Aksara Melarikan diri
Pengendali LIKE direka untuk padanan corak dalam rentetan. Walau bagaimanapun, MySQL secara khusus menetapkan garis sengkang terbalik () sebagai aksara kad bebas, yang sepadan dengan mana-mana aksara tunggal. Tingkah laku ini memperkenalkan konflik yang berpotensi kerana garis sembang terbalik () mesti dilepaskan untuk dianggap sebagai watak.
Untuk menyelesaikan konflik ini, MySQL menggunakan pelarian dua kali pada aksara sengkang terbalik apabila digunakan dalam corak SUKA. Ini bermakna bahawa setiap garis miring ke belakang dalam corak mesti digandakan untuk dianggap sebagai garis miring ke belakang literal. Sebagai contoh, 'ujian' corak memadankan rentetan dengan 'ujian' manakala 'ujian\' memadankan rentetan dengan 'ujian'.
Mengubah suai Aksara Melarikan diri
Lalai aksara escape untuk operator LIKE boleh diubah suai menggunakan klausa ESCAPE. Sebagai contoh, pertanyaan berikut menggunakan '|' sebagai watak melarikan diri, membenarkan satu garis miring ke belakang dianggap sebagai literal:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
Kesimpulan
Mekanisme melarikan diri berganda MySQL untuk aksara garisan belakang dalam corak LIKE diperlukan untuk mengelakkan percanggahan dengan gelagat kad bebas tanda serong terbalik. Walaupun pelarian rentetan biasa menggunakan satu tahap pelarian, pengendali LIKE memerlukan pelarian dua kali untuk membezakan antara garis miring ke belakang literal dan corak kad bebas. Memahami tingkah laku ini memastikan padanan corak yang tepat apabila menggunakan operator LIKE dalam MySQL.
Atas ialah kandungan terperinci Mengapa MySQL Memerlukan Melarikan Diri Berganda untuk Garis Sentak Belakang dalam Pertanyaan SEPERTI tetapi Bukan dalam Perbandingan Kesaksamaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!