Transact-SQL sorgusunda dizgeden önce N öneki


41

Lütfen bana, ne zaman Transact-SQL sorgusunda string önce N öneki kullanmalıyım? Böyle bir sorgu kullanarak sonuç alamadığım bir veritabanı ile çalışmaya başladım.

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

kalıbını değiştirene kadar N'%а_pattern%'. Daha önce bu öneki eklemek zorunda kalmamıştım, merak ediyorum. a_fieldolarak tanımlanır nvarchar(255), ancak sebebin başka bir şey olduğunu düşünüyorum.

Yanıtlar:


31

Aşağıdaki makaleler soru hakkında bazı iyi bilgiler var. Kısa cevap, kullandığınız unicode sütunu ve unicode olmayan dize değişmezi arasında bir tür uyuşmazlığı olduğudur. KB makalesinden N önekinin hala bazı durumlarda işe yarayabileceğini ihmal etmek gibi görünüyor, ancak kod sayfasına ve veritabanının harmanlama ayarlarına bağlı. Öneksiz yöntemle daha önce başarılı olduysanız, bu davranıştaki değişikliği açıklayabilir.

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


6

Bu, sonraki dizgenin Unicode'da olduğunu gösterir (N aslında Ulusal dil karakter kümesini ifade eder). Bu, CHAR, VARCHAR veya TEXT yerine NCHAR, NVARCHAR veya NTEXT değerini geçtiğiniz anlamına gelir. Bu veri türlerinin karşılaştırması için # 2354 no.lu maddeye bakın.

Unicode genellikle, örneğin Çince ve Çince gibi kod sayfalarının ötesine uzanan kod sayfalarını kolaylaştırmak için tasarlanmış veritabanı uygulamalarında kullanılır. Unicode, genişletilmiş karakter kümelerinin veritabanı sütunlarına hala "sığabileceği" şekilde tasarlanmıştır.


3

N öneki sql sunucusuna dizeyi unicode değeri olarak değerlendirmesini söyler. nvarchar sütunları unicode olduğundan, bu sütunlara erişirken bu sözdizimini kullanmalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.