Question

Nous avons une base de données et notre client est écrit avec Delphi 2007. Le dernier Interbase 2009 est utilisé. La base de données est ancienne, je crois qu'il a été créé autour de 2002 et est maintenant plus de 25 Go. Récemment, je découvert que dans IBConsole

upper('åäö')

générer 'ÅÄÖ'. Il devrait être « ÅÄÖ ». C'est des caractères suédois qui manquent dans l'alphabet anglais.

Je recherche sur le sujet et a trouvé ce lien . La partie importante est:

  

Comment puis-je changer le caractère par défaut   Ensemble d'une base de données existante? Il y a   pas pris en charge façon de le faire. Toi   devrait recréer la base de données   métadonnées.

Ce blog a été écrit par Craig 2004-06-29 Stuntz, Mon espoir est que Interbase a évolué depuis et il y a un moyen de changer le characterset pour Interbase 2009 avec peu d'effort. Dans le cas contraire possible peut-il être fait à partir d'un fichier de sauvegarde GBK? La dernière option est de créer une base de données complètement nouveau avec le droit characterset et de la pompe en quelque sorte les données de l'ancien.

J'ai donc 2 questions.

  1. Quelle est la meilleure façon de changer characterset?
  2. Quel characterset dois-je choisir d'avoir supérieur ( 'ÅÄÖ') = 'ÅÄÖ'

EDIT: Comme Craig dit qu'il n'y a aucun moyen, sauf copier les données qui connaissent le jeu de caractères. Je choisis une autre façon.

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;

simplement reconvertir les caractères suédois dans ce dos de cas en minuscules, car cela est le résultat que je reçois de Interbase. Peut-être pas la plus belle solution, mais je pense que cela fonctionne.

Était-ce utile?

La solution

Pour une utilisation suédoise ISO-8859-1 ou UNICODE. Je ne suis pas au courant de toute nouvelle façon de changer en 2009. IB le jeu de caractères par défaut dans BDs existants Quand vous pensez à ce qui est impliqué, vous verrez que vous seriez en train de recréer la DB de toute façon; vous seriez en train de changer le format de stockage de tout le texte dans la BD!

pour pomper manière la plus simple des données est probablement une pompe de données dédié comme celui DB Workbench . Vous avez besoin de « Pro » pour cette édition, mais il y a un essai gratuit pour voir si cela fonctionne. Encore une fois, considérez que vous ne pouvez pas être en mesure de copier directement les données simplement; vous devrez le faire d'une manière charset-conscient. C'est pourquoi vous devez toujours acheter votre outil de gestion DB d'une personne européenne. :)

Autres conseils

Il y a un utilitaire outil de ligne de commande sans nom FBClone: Il est capable de recréer votre base de données changer le jeu de caractères. L'utilisation de composants de projet UIB, il est donc en mesure d'utiliser Interbase ou Firebird. http://code.google.com/p/fbclone/

update RDB$DATABASE set RDB$CHARACTER_SET_NAME = 'UTF8'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top