
Envoyé par
frantzgac
Il s'agit de FB 2.5.9 et bien que la base possède le CHARSET NONE elle est ouverte en ISO8859_1
Hélas CHARSET NONE est une hérésie historique qu'il est fortement recommandé de ne pas utiliser (c'est indiqué depuis le début de Firebird dans la documentation, tout comme le fait que le propriétaire de la BDD ne devrait pas être SYSDBA.
Ouvrir en ISO8859_1 ne change rien à l'affaire puisqu'il s'agit, dans ce cas de l'achange avec l'application tierce , c'est plus un problème de table de caractère utilisé qu'autre chose. Le problème auarait pu être "contourné" en définissant la colonne avec le CHARSET voulu.
Maintenant, je présume que la question suivante serait : Comment changer le CHARSET d'une base de données et là, cela devient compliqué.
Je n'ai pas assez suivi les évolutions Firebird 3,4,5 pour affirmer que désormais il est facile de changer le CHARSET de la BDD (ou d'ailleurs le SQL Dialect)
Il existe la commande (à vérifier je crois que c'est à partir de FB3)
ALTER DATABASE SET DEFAULT CHARACTER SET default character set
et celle-ci (FB 2.5 inclus)
1 2
| ALTER CHARACTER SET <charset_name>
SET DEFAULT COLLATION <collation_name> |
toutefois via un backup/restore classique, d'expérience, ce n'est pas gardé. N.B. via mes lectures du jour, j'avais peut-être oublié un DATABASE COMMIT; et j'aurai du utilisé nBackup plutôt que le GBAK classique

Envoyé par
ATTENTION
La modification du jeu de caractères ne fonctionne correctement que si la colonne possède actuellement un jeu de caractères réel (c'est-à-dire autre que NONE ou OCTETS). La conversion de NONE ou OCTETS vers un autre jeu de caractères peut entraîner des erreurs de conversion de chaîne ou des erreurs car le contenu peut ne pas correspondre à vos attentes ou peut contenir des octets non valides dans le jeu de caractères cible
Ante FB.3, la solution préconisée était de créer une nouvelle base et de copier les données. Il existe des utilitaires comme fbcopy ou fbClone (que je n'ai jamais maitrisés et donc aimé), et certainement d'autres, fut un temps j'avais même projeté d'en écrire un en Delphi et grâce aux nouveautés de Firedac. Comme il est possible de se connecter a une base externe, j'ai aussi fait le test en créeant des procédures de copie table par table (plus long quand on a une base de données "conséquente" en nombre de tables.
Passer par exemple de NONE à UTF8 cela ne se fera pas sans mal (sauf à caster les colonnes en passant par WIN1252 pour les colonnes, N.B. je n'ai pas essayé le cast ISO8859_1)
Partager