Domanda

Abbiamo un database e il nostro cliente è scritto con Delphi 2007. L'ultima Interbase 2009 viene utilizzato. La banca dati è vecchio, credo che è stato creato intorno al 2002 ed è ora più di 25 GB. Recentemente ho scoperto che in IBConsole

upper('åäö')

generare 'AAO'. Dovrebbe essere 'AAO'. Si tratta di caratteri svedesi che mancano in alfabeto inglese.

Ho cercato su questo argomento e ho trovato questo link . La parte importante è:

  

Come posso cambiare il carattere predefinito   Set di un database esistente? C'è   non supportato modo per farlo. voi   dovrebbe ricreare il database da   metadati.

Questo blog è stato scritto da Craig 2004-06-29 Stuntz, La mia speranza è che Interbase è evoluta da allora e c'è un modo per cambiare il set di caratteri per Interbase 2009 con poco sforzo. Se non è possibile, può essere fatto da un file di backup GBK? L'ultima opzione è quella di creare un nuovo database con il set di caratteri a destra e in qualche modo pompare i dati dal vecchio.

Così ho 2 domande.

  1. Qual è il modo più semplice per il cambiamento di caratteri?
  2. Quali characterset devo scegliere di avere superiore ( 'AAO') = 'AAO'

Modifica Come Craig ha detto che non v'è alcun modo reale tranne copiare i dati che sono a conoscenza il set di caratteri. Così ho scelto un altro modo.

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;

Questo semplicemente convertire indietro caratteri svedesi in questo caso torna in minuscolo in quanto questo è il risultato che ricevo da Interbase. Forse non è la soluzione più bella, ma penso che funziona.

È stato utile?

Soluzione

Per l'impiego svedese ISO-8859-1 o Unicode. Non ho familiarità con qualsiasi nuovo modo per cambiare il set di caratteri di default nei DB esistenti in IB 2009. Quando si pensa a cosa è coinvolto vedrete saresti ricreare il DB in ogni caso; si sarebbe cambiando il formato di tutto il testo nel DB di stoccaggio!

Il modo più semplice per pompare il dato è probabilmente una pompa di dati dedicato come quello di DB Workbench . È necessario l'edizione "Pro" per questo, ma non c'è una prova gratuita per vedere se funziona. Anche in questo caso, si consideri che potrebbe non essere in grado di basta copiare direttamente i dati; dovrete farlo in un modo charset-aware. Questo è il motivo per cui si dovrebbe sempre comprare il vostro strumento di gestione DB da una persona europea. :)

Altri suggerimenti

V'è un'utility a riga di comando strumento gratuito denominato FBClone: E 'in grado di ricreare il database cambiando il set di caratteri. I componenti UIB uso di progetto, quindi è in grado di utilizzare Interbase o Firebird. http://code.google.com/p/fbclone/

update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top