N awalan sebelum string dalam kueri Transact-SQL

41

Bisakah Anda memberi tahu saya, kapan saya harus menggunakan awalan N sebelum string dalam permintaan Transact-SQL? Saya sudah mulai bekerja dengan database di mana saya tidak mendapatkan hasil menggunakan kueri seperti ini

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

sampai saya mengubah pola menjadi N'%а_pattern%'. Saya tidak pernah menambahkan awalan ini di masa lalu, jadi saya ingin tahu. a_fielddidefinisikan sebagai nvarchar(255), tetapi saya pikir alasannya adalah sesuatu yang lain.

Alexander Prokofyev
sumber

Jawaban:

31

Artikel-artikel berikut memiliki beberapa informasi yang bagus tentang pertanyaan itu. Jawaban singkatnya hanyalah bahwa ada ketidakcocokan jenis antara kolom unicode dan string non-unicode literal yang Anda gunakan. Dari artikel KB, sepertinya menghilangkan awalan N mungkin masih berfungsi dalam beberapa kasus, tetapi itu tergantung pada halaman kode dan pengaturan susunan database. Itu mungkin menjelaskan perubahan perilaku, jika Anda sebelumnya sukses dengan metode no-prefix.

https://support.microsoft.com/en-us/kb/239530

Charlie
sumber
6

Ini menunjukkan bahwa string selanjutnya dalam Unicode (N sebenarnya adalah singkatan dari set karakter bahasa Nasional). Yang berarti Anda melewati nilai NCHAR, NVARCHAR atau NTEXT, sebagai lawan dari CHAR, VARCHAR atau TEXT. Lihat artikel # 2354 untuk perbandingan tipe data ini.

Unicode biasanya digunakan dalam aplikasi basis data yang dirancang untuk memfasilitasi halaman kode yang melampaui halaman kode Inggris dan Eropa Barat misalnya Cina. Unicode dirancang sehingga set karakter yang diperluas masih bisa "masuk" ke dalam kolom basis data.


sumber
3

Saya pikir awalan-N memberitahu sql server untuk memperlakukan string sebagai nilai unicode. kolom nvarchar adalah unicode sehingga Anda harus menggunakan sintaks ini ketika mengakses kolom ini.

Rune Grimstad
sumber