Rumah >pangkalan data >tutorial mysql >Mengapa Pelayan SQL Mengabaikan Ruang Jejak di WHERE Klausa Perbandingan?

Mengapa Pelayan SQL Mengabaikan Ruang Jejak di WHERE Klausa Perbandingan?

Susan Sarandon
Susan Sarandonasal
2025-01-05 03:16:40886semak imbas

Why Does SQL Server Ignore Trailing Spaces in WHERE Clause Comparisons?

Percanggahan Trailing Spaces dalam SQL WHERE Klausa Perbandingan

Dalam SQL Server, perbandingan klausa WHERE menggunakan operator = sering menimbulkan percanggahan yang boleh membingungkan. Khususnya, ruang mengekor dalam nilai rentetan diabaikan semasa membuat perbandingan. Tingkah laku ini menyimpang daripada apa yang mungkin dijangkakan, membawa kepada hasil yang tidak dijangka.

Contoh Demonstrasi

Pertimbangkan contoh berikut dalam SQL Server 2008:

SELECT '"' + ZoneReference + '"' AS QuotedZoneReference
FROM Zone
WHERE ZoneReference = 'WF11XU'

Pertanyaan ini mendapatkan semula data daripada jadual yang dipanggil "Zon," dengan "ZoneReference" ialah kunci utama lajur. Menjalankan pertanyaan akan mengembalikan hasil berikut:

"WF11XU "

Perhatikan ruang belakang yang dilampirkan pada nilai dalam hasil. Ini walaupun pada hakikatnya kriteria perbandingan tidak termasuk sebarang ruang belakang.

Punca Percanggahan

Percanggahan timbul disebabkan oleh SQL ANSI/ISO SQL- 92, khususnya Bahagian 8.2, yang menentukan cara perbandingan rentetan dengan ruang dikendalikan. Mengikut spesifikasi, SQL Server pad rentetan aksara yang digunakan dalam perbandingan untuk memadankan panjang sebelum membuat perbandingan. Ini bermakna ruang mengekor ditambah atau dialih keluar secara automatik untuk menjajarkan panjang.

Kesan pada Keputusan

Dalam kebanyakan kes, kemasukan ruang mengekor dalam padanan perbandingan menghasilkan jangkaan keputusan. Walau bagaimanapun, apabila membandingkan nilai di mana ruang mengekor adalah penting, ia boleh membawa kepada hasil yang salah atau tidak dijangka. Sebagai contoh, apabila mencari padanan tepat yang merangkumi ruang, ruang belakang tambahan boleh menyebabkan padanan palsu.

Penyelesaian

Untuk menyelesaikan isu dan memastikan perbandingan yang tepat, satu boleh menggunakan fungsi TRIM() untuk mengalih keluar sebarang ruang hadapan atau belakang daripada rentetan yang terlibat dalam perbandingan. Ini akan memaksa padanan tepat tanpa pelapik.

Contoh Penyelesaian

SELECT '"' + TRIM(ZoneReference) + '"' AS QuotedZoneReference
FROM Zone
WHERE TRIM(ZoneReference) = 'WF11XU'

Menggunakan fungsi TRIM() seperti yang ditunjukkan memastikan padanan tepat rentetan, termasuk ruang .

Atas ialah kandungan terperinci Mengapa Pelayan SQL Mengabaikan Ruang Jejak di WHERE Klausa Perbandingan?. 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