it-swarm.asia

البادئة N قبل السلسلة في استعلام Transact-SQL

هل يمكن أن تخبرني ، من فضلك ، متى يجب أن أستخدم البادئة N قبل السلسلة في استعلام Transact-SQL؟ لقد بدأت العمل مع قاعدة بيانات حيث لا أحصل على أي نتائج باستخدام الاستعلام مثل هذا

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

حتى أقوم بتغيير النمط إلى N'%а_pattern%'. لم أضطر أبدًا إلى إضافة هذه البادئة في الماضي ، لذلك أشعر بالفضول. يتم تعريف a_field على أنه nvarchar(255) ، لكن أعتقد أن السبب هو شيء آخر.

41
Alexander Prokofyev

تحتوي المقالات التالية على بعض المعلومات الجيدة حول السؤال. الإجابة المختصرة هي فقط أن هناك عدم تطابق في النوع بين عمود unicode والحرف الحرفي غير unicode الذي تستخدمه. من مقالة KB ، يبدو أن حذف البادئة N قد يستمر في العمل في بعض الحالات ، ولكنه سيعتمد على صفحة الرموز وإعدادات ترتيب قاعدة البيانات. قد يفسر هذا التغيير في السلوك ، إذا كنت قد حققت نجاحًا سابقًا باستخدام طريقة no-prefix.

https://support.Microsoft.com/en-us/kb/2395

31
Charlie

يشير هذا إلى أن السلسلة اللاحقة موجودة في Unicode (يشير N فعليًا إلى مجموعة أحرف اللغة الوطنية). مما يعني أنك تمرر قيمة NCHAR أو NVARCHAR أو NTEXT ، على عكس CHAR أو VARCHAR أو TEXT. انظر المادة # 2354 لمقارنة أنواع البيانات هذه.

يستخدم Unicode عادةً في تطبيقات قواعد البيانات المصممة لتسهيل صفحات الرموز التي تتجاوز صفحات الشفرات الإنجليزية وأوروبا الغربية على سبيل المثال الصينية. تم تصميم Unicode بحيث تظل مجموعات الأحرف الموسعة "ملائمة" في أعمدة قاعدة البيانات.

6
Gopu Krishnan

أعتقد أن البادئة N تخبر خادم SQL بمعالجة السلسلة كقيمة unicode. أعمدة nvarchar هي unicode لذا يجب عليك استخدام هذه البنية عند الوصول إلى هذه الأعمدة.

3
Rune Grimstad