Mengapa tanda hubung menjadi pertanyaan? Atau masalah dengan pengkodean data dalam SQL

Seorang klien menghubungi saya, yang saya enam bulan lalu mengunggah data dari Excel ke daftar produk Aplikasi dari klien. Video tentang hasilnya.
File itu dibentuk di Cina, di mana alfabet Cyrillic biasa tidak digunakan.

Item dengan nama "ABM3C - 25 - D - Y T Tยป "dimuat.

Setelah mengunduh, kita mendapatkan "ABM3C? 25? D4Y? T." Setelah ProFiler, saya menangkap prosedur penulisan:

exec 3, 'ABM3C-25-D4Y-T'

Artinya, penggantian sudah dilakukan pada SQL itu sendiri. Basis data dibuat pada platform Communicator Klien. Karena kebiasaan, saya memeriksa opsi penyortiran untuk database itu sendiri, semuanya baik-baik saja - Cyrillic_General_CI_AS, seperti yang disarankan selama instalasi.

Dimainkan dengan pemeran dan konversi - berikan pertanyaan alih-alih tanda hubung. Saya tidak bisa menyelesaikan masalah sendiri ... Saya menghubungi layanan dukungan teknis platform Communicator pengembang dengan masalah ini.

Tanggapan pengembang pada awalnya sangat mengejutkan: "Anda harus menggunakan tipe data Nvarchar, dan Anda mungkin menggunakan Varchar." Perekaman dilakukan dalam bidang dengan tipe data nvarchar (diatur secara default saat membuat bidang dalam konfigurator).

Saya menunjukkan bahwa skrip paling sederhana memberi saya semua tanda tanya yang sama.
pilih 'ABM3C - 25 D D4Y - T', cast ('ABM3C 25 25 D D4Y T T' sebagai nvarchar) Saya

mendapat saran - beri N. sebelum kutipan tunggal pertama,

pilih N'ABM3C - 25 - D4Y - T '

memberi saya hasil yang diinginkan . Dengan menambahkan N, kami mengindikasikan ke SQL bahwa string ini harus diproses sebagai nilai dalam Unicode.

Mengoreksi panggilan prosedur dengan menambahkan N:

exec 3, N'ABM3C - 25 - D4Y - T '

Saya selalu tahu bahwa saya harus meletakkan huruf N di depan tanda kutip, tetapi saya tidak melampirkan signifikansi khusus untuk itu sampai saya menemukan masalah ini.

All Articles