سؤال

لدينا قاعدة بيانات ويتم كتابة عميلنا مع Delphi 2007. يتم استخدام أحدث Interbase 2009. قاعدة البيانات قديمة ، وأعتقد أنها تم إنشاؤها في حوالي عام 2002 وهي الآن أكثر من 25 جيجابايت. اكتشفت مؤخرًا ذلك في IBConsole

upper('åäö')

توليد 'Åäö'. يجب أن يكون "Åäö". هذه شخصيات سويدية مفقودة في الأبجدية الإنجليزية.

لقد بحثت عن الموضوع ووجدت هذا حلقة الوصل. الجزء المهم هو:

كيف يمكنني تغيير مجموعة الأحرف الافتراضية لقاعدة بيانات موجودة؟ لا توجد طريقة مدعومة للقيام بذلك. يجب عليك إعادة إنشاء قاعدة البيانات من البيانات الوصفية.

كتبت هذه المدونة 2004-06-29 من قبل كريج ستونتز ، آمل أن تكون interbase قد تطورت منذ ذلك الحين وهناك طريقة لتغيير شخصيات interbase 2009 دون جهد ضئيل. إذا لم يكن ممكنًا ، فهل يمكن القيام به من ملف النسخ الاحتياطي GBK؟ الخيار الأخير هو إنشاء قاعدة بيانات جديدة تمامًا مع FormeSet الصحيحة وضخ البيانات بطريقة أو بأخرى من القديم.

لذلك لدي سؤالان.

  1. ما هي أسهل طريقة لتغيير الأحرف؟
  2. ما هي الأحرف التي يجب أن أختار أن أحصل عليها ('Åäö') = 'Åäö'

تعديل: كما قال كريج ، لا توجد طريقة حقيقية باستثناء نسخ البيانات التي تدرك Charset. لذلك اخترت طريقة أخرى.

vName := AnsiUpperCase(Nametosearch);
MakeCharLowercase(vName, 'åäö');
// Then use vName when search in database.

procedure TDuplicateDeptForm.MakeCharLowercase(var aName: String; aCharSet: String);
var
  vIndex, i: Integer;
  vChar: String;
begin
  for i := 1 to Length(aCharSet) do
  begin
    vChar := AnsiUpperCase(aCharSet[i]);
    repeat
      vIndex := AnsiPos(vChar, aName);
      if vIndex > 0 then
        aName[vIndex] := AnsiLowerCase(vChar)[1];
    until vIndex = 0;
  end;
end;

هذا ببساطة تحويل الأحرف السويدية في هذه الحالة العودة إلى الأحرف الصغيرة لأن هذه هي النتيجة التي أحصل عليها من interbase. ربما ليس أجمل حل ولكني أعتقد أنه يعمل.

هل كانت مفيدة؟

المحلول

للاستخدام السويدي ISO-8859-1 أو Unicode. لست على دراية بأي طريقة جديدة لتغيير Charset الافتراضي في DBS الحالية في IB 2009. عندما تفكر في ما هو المعني ، سترى أنك ستقوم بإعادة إنشاء DB على أي حال ؛ كنت تقوم بتغيير تنسيق التخزين لجميع النصوص في DB!

أسهل طريقة لضخ البيانات ربما تكون مضخة بيانات مخصصة مثل تلك الموجودة في DB Workbench. أنت بحاجة إلى إصدار "Pro" لهذا الغرض ، ولكن هناك تجربة مجانية لمعرفة ما إذا كانت تعمل. مرة أخرى ، فكر في أنك قد لا تتمكن من نسخ البيانات مباشرة ؛ سيكون عليك القيام بذلك بطريقة مدرجة. لهذا السبب يجب عليك دائمًا شراء أداة إدارة DB الخاصة بك من شخص أوروبي. قون

نصائح أخرى

هناك أداة FREE LINE STERM تسمى FBCLONE: إنها قادرة على إعادة إنشاء قاعدة البيانات الخاصة بك تغيير مجموعة الأحرف. يستخدم المشروع مكونات UIB ، لذلك يمكنه استخدام interbase أو firebird.http://code.google.com/p/fbclone/

update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top