Terperangkap oleh Trailing Spaces: A SQL Comparison Conundrum
Pertimbangkan pertanyaan SQL berikut, di mana kami cuba memadankan nilai dalam jadual Zon :
select '"' + ZoneReference + '"' as QuotedZoneReference from Zone where ZoneReference = 'WF11XU'
Kami terkejut, keputusan menunjukkan ketinggalan yang tidak dijangka ruang:
"WF11XU "
Walaupun ruang kosong mengekori, SQL Server mengembalikan padanan, membuatkan kami terpinga-pinga.
Tingkah laku yang kelihatan berlawanan dengan intuitif ini boleh dijelaskan dengan menyelami piawaian yang membimbing perbandingan rentetan SQL Server . Mengikut spesifikasi ANSI/ISO SQL-92, SQL Server pad rentetan aksara yang digunakan dalam perbandingan untuk memastikan ia mempunyai panjang yang sama sebelum melakukan semakan. Peraturan ini meliputi kebanyakan operasi perbandingan, menjadikan rentetan seperti 'abc' dan 'abc ' setara untuk perbandingan rentetan.
Walau bagaimanapun, pengecualian kepada peraturan ini ialah predikat LIKE. Hanya apabila pengendali LIKE terlibat, SQL Server menahan diri daripada berlapik. Perbezaan ini berpunca daripada tujuan utama predikat LIKE untuk pemadanan corak dan bukannya ujian kesamaan rentetan langsung.
Dalam kes kami, memandangkan kami menggunakan operator kesamarataan mudah (=), ruang belakang dipertimbangkan oleh SQL Server , membawa kepada perlawanan yang berjaya. Jika niat kami adalah untuk mencari padanan tepat, kami boleh menggunakan predikat LIKE, yang akan mengabaikan ruang belakang dan memberikan hasil yang lebih tepat.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Padan dengan Ruang Jejak Walaupun Menggunakan Operator Kesamaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!