لماذا يصبح اندفاعة سؤال؟ أو مشاكل في بيانات الترميز في SQL

قام أحد العملاء بالاتصال بي ، والذي قمت بتحميله منذ ستة أشهر من Excel من قائمة التطبيقات من العميل. فيديو عن النتيجة.
تم تشكيل الملف في الصين ، حيث لا يتم استخدام الأبجدية السيريلية المعتادة.

يتم تحميل عنصر باسم "ABM3C - 25 - D - Y T T» ".

بعد التنزيل ، نحصل على "ABM3C؟ 25؟ D4Y؟ T." بعد ProFiler ، اكتشفت إجراء الكتابة:

exec 3 ، "ABM3C-25-D4Y-T"

أي أن الاستبدال قد تم بالفعل على SQL نفسها. تم إنشاء قاعدة البيانات على منصة Communicator Client. خارج العادة ، راجعت خيارات الفرز لقاعدة البيانات نفسها ، كل شيء على ما يرام - Cyrillic_General_CI_AS ، على النحو الموصى به أثناء التثبيت.

يتم لعبه باستخدام الإرسال والتحويل - طرح الأسئلة بدلاً من الشرطات. لم أتمكن من حل المشكلة بنفسي ... لقد اتصلت بخدمة الدعم الفني لمطوري النظام الأساسي لبرنامج Communicator Client لحل هذه المشكلة.

كانت استجابة المطور في البداية مفاجئة للغاية: "يجب عليك استخدام نوع بيانات Nvarchar ، وربما تستخدم Varchar". يتم إجراء التسجيل في حقل بنوع بيانات nvarchar (يتم تعيينه افتراضيًا عند إنشاء حقل في المكوّن).

أظهر لي أن أبسط نص يعطيني كل نفس علامات الاستفهام المؤسفة.
حدد "ABM3C - 25 D D4Y - T" ، وألقي ("ABM3C 25 25 D D4Y T T" كـ nvarchar)

تلقيت نصيحة - ضع N. قبل أول عرض مفرد ،

حدد N'ABM3C - 25 - D4Y - T "

أعطاني النتيجة المرجوة . بإضافة N ، أشرنا إلى SQL أننا بحاجة إلى معالجة هذه السلسلة كقيمة في Unicode.

تم تصحيح استدعاء الإجراء بإضافة N:

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

كنت أعلم دائمًا أنه يجب أن أضع الحرف N أمام علامة الاقتباس ، لكنني لم أعلق أي أهمية خاصة عليه حتى واجهت هذه المشكلة.

All Articles