Bonjour à tous ,
je voudrais modifier le CHARACTER d'un champs dans une table de ISO8859_1 to UNICODE_FSS
Code:ACT Varchar(255) CHARACTER SET ISO8859_1,
Version imprimable
Bonjour à tous ,
je voudrais modifier le CHARACTER d'un champs dans une table de ISO8859_1 to UNICODE_FSS
Code:ACT Varchar(255) CHARACTER SET ISO8859_1,
Bonsoir.
J'ai découvert ce site l'année dernière et il est fort intéressant et très complet. Les articles sont bien détaillés et le code super propre (on dirait du code à la Sergio ;)).
Vous y trouverez la réponse à votre problème.
https://firebird21.wordpress.com/201...e-una-columna/
Bonnes fêtes !
bonjour,
Merci pour le code , il s’exécute bien mais bizarrement il ya pas de changement, le 'CHARACTER' initiale est 'ISO8859_1'
Et, si vous nous indiquiez ce que vous avez écrit comme code ?
Et comment vous avez vérifié votre assertion ?
Ceci sans parler du fait que vous ne nous avez pas indiqué de quelle version de Firebird il s'agit. L'article pointé ne l'indiquait pas non plus mais vu la date je dirais FB 2.1 . Chaque version "majeure" peut réduire ou augmenter certaines choses, d'une manière générale plus on monte ne version plus les accès aux tables système sont protégées.
Le saviez-vous ? FB3 ne permet plus les modifications sur les tables système pour désactiver facilement les triggers (UPDATE operation is not allowed for system table RDB$TRIGGERS ), FB4 ne permet pas par défaut les UDF externes
Pour avoir fait le test, la méthode 2 : création d'une nouvelle colonne, copie des données par UPDATE, destruction de l'ancienne colonne, renommage de la nouvelle colonne (ancien nom) fonctionne sous FB3
désolé pour le délai de réponse, je suis un peu malade (grippe). Pour la version de firebird c'est 2.5
La commande
Code:ALTER TABLE DOS ALTER COLUMN ACT TYPE VARCHAR(255) CHARACTER SET UNICODE_FSS
dans mon premier post, je vous avais recommandé d'utiliser la méthode 2 ! Celle-ci fonctionne (testée sur FB3 et FB 2.5)
voici ce que j'ai écrit dans FlameRobin
ou APPOSE est la table à modifier, et LIBELLE_APPOSE la colonne à modifierCode:
1
2
3
4
5
6
7 ALTER TABLE APPOSE ADD TEMPCOL VARCHAR(40) CHARACTER SET UNICODE_FSS; COMMIT; UPDATE APPOSE SET TEMPCOL=CAST(LIBELLE_APPOSE AS VARCHAR(40) CHARACTER SET OCTETS); COMMIT; ALTER TABLE APPOSE DROP LIBELLE_APPOSE; ALTER TABLE APPOSE ALTER COLUMN TEMPCOL TO LIBELLE_APPOSE;
Vous remarquerez que j'ai simplifié la méthode (ce n'était que pour test)
Rien ne vous empêche d'en faire une procédure (AMHA inutile puisque processus normalement ponctuel !) avec paramètres, en utilisant des EXECUTE STATEMENT
pour info voici un SQL pour vérifier
Code:
1
2
3
4
5 SELECT r.RDB$FIELD_NAME,f.RDB$FIELD_NAME, r.RDB$CHARACTER_SET_ID,s.RDB$CHARACTER_SET_NAME FROM RDB$FIELDS r LEFT JOIN RDB$CHARACTER_SETS s on s.RDB$CHARACTER_SET_ID=r.RDB$CHARACTER_SET_ID LEFT JOIN RDB$RELATION_FIELDS f on f.RDB$FIELD_SOURCE=r.RDB$FIELD_NAME where f.RDB$RELATION_NAME='NOMDEMATABLE'