Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah MySQL Memerlukan Garis Segaris Belakang Berganda untuk Meloloskan Garis Segaris Belakang dalam Pertanyaan SEPERTI Tetapi Tidak dalam Pertanyaan Sama (=)?

Mengapakah MySQL Memerlukan Garis Segaris Belakang Berganda untuk Meloloskan Garis Segaris Belakang dalam Pertanyaan SEPERTI Tetapi Tidak dalam Pertanyaan Sama (=)?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 05:22:02530semak imbas

Why Does MySQL Require Double Backslashes to Escape a Backslash in LIKE Queries But Not in Equals (=) Queries?

Memahami MySQL's Slash () Escape in Queries

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.

The Equal Operator (=)

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.

Operator LIKE

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.

Penjelasan

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.

Menukar Aksara Escape

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn