أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

يتم تمثيل بيانات الأحرف بشكل غير صحيح عند صفحة الرموز للكمبيوتر العميل يختلف شفرة قاعدة البيانات في SQL Server 2005

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

اضغط هنا لرابط المقالة باللغة الانجليزية904803
الأعراض
يرجى مراعاة السيناريو التالي:
  • في Microsoft SQL Server 2005، يمكنك استخدام ماناجيمينتستوديو ملقم SQL للاستعلام بيانات من قاعدة بيانات ملقم SQL التي تستخدم نوع بيانات Unicode حالاً. على سبيل المثال، يستخدم قاعدة بيانات SQL Server حرف نوع البيانات، varchar نوع بيانات، أو النص نوع بيانات.
  • صفحة الرموز للكمبيوتر العميل يختلف عن ترميز قاعدة البيانات. صفحة الترميز اللغوي مقترن بترتيب الحكم.
في هذا السيناريو، يتم تمثيل بيانات الأحرف غير صحيح.

على سبيل المثال، قد تواجه إحدى المشكلات التالية:
  • يتم تمثيل بيانات الأحرف كعلامة استفهام (؟). قد تظهر هذه المشكلة إذا قمت بإدراج أو تحديث بيانات الأحرف بتنسيق Unicode حالاً نوع البيانات قبل الاستعلام عن بيانات الأحرف. بروبليموككورس هذا إذا قمت بإجراء هذا التغيير باستخدام SQL Server إدارة Studio على كمبيوتر أكلينت يحتوي على صفحة تعليمات برمجية أخرى.
  • يتم تمثيل بيانات الأحرف كبيانات تالفة. ثيتشاراكتير بيانات الصفحة التعليمات البرمجية X يتم تخزين في عمود شفرة Unicode حالاً Y. بالإضافة إلى ذلك، لا يتم تحويل البيانات ثيتشاراكتير. تحدث هذه المشكلة عند الاستعلام البيانات ثيتشاراكتير باستخدام SQL Server إدارة Studio.

    ملاحظة: عند الاستعلام بيانات الأحرف باستخدام محلل استعلام SQL إينميكروسوفت SQL Server 2000، حرف يتم تمثيل البيانات بشكل صحيح إذا الإعدادإجراء الترجمة لبيانات الأحرف ( ترجمة التلقائية تم تعطيل المعلمة). على ترجمة التلقائية المعلمة معلمة سلسلة _ الاتصال خاصية لموفر Microsoft OLE DB ل SQL Server وفورميكروسوفت ". NET Framework موفر البيانات" ل OLE DB.
السبب
تحدث هذه المشكلة لأن بيانات الأحرف شفرة X يتم تخزين في عمود غير Unicode مخطط شفرة Y. بالإضافة إلى ذلك، لا تتم ترجمة بيانات الأحرف بشكل صحيح. ونحن لا نؤيد تخزين بيانات الأحرف شفرة X في عمود صفحة الترميز اللغوي Y.

عند استخدام سلسلة حرفية من نوع بيانات لا تدعم Unicode، يتم تحويل سلسلة حرفية باستخدام صفحة الرموز الافتراضية لقاعدة البيانات المستمدة من الترتيب قاعدة البيانات في SQL Server 2005. تخزين بيانات الأحرف شفرة X في عمود صفحة الترميز اللغوي Y قد يسبب تلف البيانات أو فقدان البيانات.

إذا تم تمثيل بيانات الأحرف كبيانات تالفة، يمكن تمثيل البيانات بشكل صحيح فقط إذا قمت بتعطيل المعلمة ترجمة تلقائي لموفر Microsoft OLE DB ل SQL Server أو موفر بيانات Microsoft. net Framework ل OLE DB.

ملاحظة: يستخدم SQL Server إدارة Studio Microsoft. net Framework موفر البيانات ل SQL Server للاتصال بقاعدة بيانات SQL Server. لا يدعم موفر البيانات هذا المعلمة ترجمة تلقائي .
الحل البديل
للتغلب على هذه المشكلة، استخدم إحدى الطرق التالية.

الطريقة الأولى: استخدام نوع بيانات Unicode بدلاً من نوع بيانات لا تدعم Unicode

تغيير الأعمدة إلى نوع بيانات Unicode لتجنب المشاكل التي تنتج عن ترجمة صفحة التعليمات البرمجية. على سبيل المثال، استخدم نوع البيانات nchar أو نوع البيانات nvarchar أو نوع بيانات ntext .

لمزيد من المعلومات حول تخزين بيانات Unicode، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
239530 يجب أن يسبق كافة سلاسل Unicode باستخدام بادئة N عند التعامل مع ثوابت السلسلة Unicode في SQL Server

الطريقة الثانية: استخدام ترتيب المناسب لقاعدة البيانات

إذا كان يجب استخدام نوع بيانات غير Unicode، تأكد دائماً من أن شفرة قاعدة البيانات وصفحة الرموز لأية أعمدة غير Unicode من تخزين بيانات Unicode غير صحيح. على سبيل المثال، إذا كنت تريد تخزين بيانات مخطط شيفرة 949 (الكورية) الحرف، استخدام ترتيب كورية لقاعدة البيانات. على سبيل المثال، استخدم ترتيب Korean_Wansung_CI_AS لقاعدة البيانات.

الطريقة الثالثة: استخدام نوع البيانات ثنائي أو نوع البيانات varbinary

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

الأسلوب 4: استخدام أداة مختلفة لتخزين البيانات واستردادها، وتعطيل المعلمة "ترجمة تلقائي"

تحذير نحن لا اختبار أو دعم تخزين بيانات الأحرف شفرة X في عمود صفحة الترميز اللغوي Y. قد تتسبب هذه العملية في نتائج الاستعلام غير صحيحة لغوياً ومطابقة السلسلة غير صحيح أو الترتيب وترجمة صفحة رمز غير متوقع (تلف البيانات). ننصح باستخدام إحدى الطرق الأخرى لمعالجة هذه المشكلة.

عند استخدام موفر Microsoft OLE DB ل SQL Server للاتصال بقاعدة بيانات تحتوي على صفحة التعليمات برمجية مختلفة ومحاولة الاستعلام بيانات من عمود من نوع بيانات لا تدعم Unicode، يجب التأكد من أن تقوم بتخزين الأحرف غير مترجمة إلى قاعدة البيانات.

ملاحظة: يفترض المثال التالي أن صفحة الرموز للكمبيوتر العميل الكورية (CP949) وأن صفحة الرموز لقاعدة بيانات SQL Server الإنكليزية (CP1252). يجب استبدال العناصر النائبة في أمثلة التعليمات البرمجية باستخدام القيم المناسبة للموقف لديك.

للتغلب على هذه المشكلة، اتبع الخطوات التالية:
  1. يدوياً تحويل الأحرف إلى بيانات أولية وثينينسيرت البيانات في قاعدة البيانات باستخدام صفحة التعليمات البرمجية لقاعدة البيانات. دوثيس، استخدم تعليمات برمجية مشابهة لمثال التعليمات البرمجية التالي.
    string strsrc="가";string strsrc="가";string strtag=Encoding.GetEncoding(1252).GetString(Encoding.GetEncoding(949).GetBytes (strsrc));sql="insert into <tablename> (<column>,) values ('" + strtag + "')";// code for updating the database;
    ملاحظة: تتم كتابة مثال التعليمات البرمجية هذا في C#.
  2. عندما تريد استعلام البيانات، استخدام Microsoft OLE دببروفيدير ل SQL Server أو Microsoft. net Framework موفر البيانات ل SQLServer للاتصال بقاعدة البيانات، ثم قم بتعيين المعلمة ترجمة تلقائي إلى False. للقيام بذلك، استخدم التعليمات البرمجية التي تشبه كوديكسامبلي التالية.
    OleDbConnection conn=new OleDbConnection("Provider=SQLOLEDB;" +	" Initial Catalog =<yourdatabase>;"+	"User id=<youruserid>; Password=<yourpassword>;"+	"Auto Translate=False"	);// code for representing the character data;
تصريح
أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "ينطبق على".
معلومات أخرى

خطوات إعادة إنشاء المشكلة

  1. على كمبيوتر عميل يحتوي الكورية (CP949) كصفحة التعليمات البرمجية ثيديفولت، ابدأ Studio إدارة ملقم SQL.
  2. الاتصال بقاعدة بيانات بالانكليزية (CP1252) كصفحة التعليمات البرمجية ثيديفولت.
  3. إنشاء جدول في قاعدة البيانات باستخدام التعليمات البرمجية التالية لينيوف.
    Create table tbTest (A char(20), NA nchar(10), Comment char(20))
  4. إدراج حرف اللغة كورية لقاعدة بيانات باستخدام استعلام thefollowing.
    Insert into tbTest (A,NA,Comment) values('가',N'가','SQL2005/INSERT')
  5. قم بإنشاء استعلام "تحديد" لاسترداد البيانات باستخدام thefollowing سطر من التعليمات البرمجية.
    select * from tbTest
تظهر النتائج التالية. القيمة الموجودة في العمود A علامة استفهام.
A                    NA         Comment-------------------- ---------- --------------------?                    가          SQL2005/INSERT
مراجع
لمزيد من المعلومات حول ترتيب SQL Server والمعلمة "ترجمة تلقائي"، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
162367 كيفية نقل "الكورية مزدوج البايت أحرف مجموعة" الأحرف
234748 لا يمكن ترجمة بيانات الأحرف من عميل إلى خادم باستخدام برنامج تشغيل SQL Server ODBC إذا كان صفحة رموز العميل يختلف عن شفرة الملقم بشكل صحيح
لمزيد من المعلومات حول أنواع بيانات SQL Server Unicode، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
kbsql2005devbug

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 904803 - آخر مراجعة: 05/01/2016 19:12:00 - المراجعة: 2.0

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Express Edition

  • kbprb kbmt KB904803 KbMtar
تعليقات
html>