Frage

Wir haben eine Datenbank und unsere Kunden geschrieben mit Delphi 2007. Der neuesten Interbase 2009 verwendet wird. Die Datenbank ist alt, ich glaube, es wurde um 2002 gegründet und ist jetzt über 25 GB. Kürzlich entdeckte ich, dass in IBConsole

upper('åäö')

erzeugen 'AAO. Es sollte "AAO sein. Dies ist schwedisches Zeichen, die im englischen Alphabet fehlen.

suchte ich über das Thema und fand diesen Link . Der wichtigste Teil ist:

  

Wie kann ich die Standard-Zeichen   Setzen einer vorhandenen Datenbank? Es gibt   keine Möglichkeit unterstützt, dies zu tun. Du   sollte die Datenbank neu aus   Metadaten.

Dieser Blog wurde geschrieben 2004-06-29 Craig Stuntz, Meine Hoffnung ist, dass da Interbase, dass entwickelt hat, und es gibt eine Möglichkeit, die characterset für Interbase 2009 und mit wenig Aufwand zu ändern. Falls dies nicht möglich kann es aus einer GBK Sicherungsdatei durchgeführt werden? Die letzte Option ist eine völlig neue Datenbank mit dem richtigen Zeichensatz zu erstellen und irgendwie Daten von dem alten Pumpe.

Also ich habe 2 Fragen.

  1. Was ist der einfachste Weg, um Veränderung characterset?
  2. Was characterset soll ich wählen Ober haben ( 'AAO) =' AAO

EDIT: , sagte Craig Wie es keine wirkliche Möglichkeit, außer die Daten kopieren, die die charset bewusst sind. So wähle ich einen anderen Weg.

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;

Diese konvertieren einfach zurück Schwedisch Zeichen in diesem Fall wieder in Kleinbuchstaben, da dies das Ergebnis, das ich von Interbase erhalten. Vielleicht nicht die schönste Lösung, aber ich denke, es funktioniert.

War es hilfreich?

Lösung

Für schwedische Verwendung ISO-8859-1 oder UNICODE. Ich bin nicht mit jeder neuen Weg, um den Standard-Zeichensatz in bestehenden DBs in IB 2009 zu ändern, wenn Sie darüber nachdenken, was beteiligt ist Sie werden sehen Sie die DB neu zu erstellen ohnehin würde sein; Sie das Speicherformat des gesamten Textes in der DB zu ändern würden!

Der einfachste Weg, um die Daten zu pumpen ist wahrscheinlich eine dedizierte Datenpumpe, wie die in DB Workbench . Sie müssen die „Pro“ -Version für diese, aber es gibt eine kostenlose Testversion, um zu sehen, ob es funktioniert. Wieder betrachtet, dass Sie nicht in der Lage sein können nur direkt Daten zu kopieren; Sie werden es in einer charset-aware Art und Weise zu tun haben. Dies ist, warum Sie immer Ihr DB-Management-Tool von einer europäischen Person kaufen sollen. :)

Andere Tipps

Es gibt ein kostenloses Kommandozeilen-Tool Dienstprogramm FBClone genannt: Es ist in der Lage Ihre Datenbank Ändern der Zeichensatz neu zu erstellen. Die Projekt Verwendung UIB Komponenten, so ist es in der Lage Interbase oder Firebird zu verwenden. http://code.google.com/p/fbclone/

update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top