Bonjour,
J'ai des problèmes de caractères accentués dans des champs de type CLOG! et je recherche de l'aide pour trouver une explication aux phénomènes que j'observe sans comprendre
Mon environnement :
- Serveur Oracle 9i sous UNIX (initialement sous Oracle 8 mais migré récemment en 9i)
- Client Oracle 9i sous Windows
Pour info :
- NLS_LANGUAGE = AMERICAN
NLS_CHARACTERSET = WE8MSWIN1252
NLS_NCHAR_CHARACTERSET = AL16UTF16
NLS_SAVED_NCHAR_CS = WE8MSWIN1252
NLS_NCHAR_CONV_EXCP = FALSE
Il y a un an la table suivante a été créée (à l’époque sous Oracle 8 et vraisemblablement avec un jeu de caractères différent, mais je ne sais pas lequel)
Quelques jours après la création de cette table le jeu de caractères de la base a été changé pour aboutir à la configuration d’aujourd’hui.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE GraphSeries ( ItemId NUMBER (12) NOT NULL , DataBaseID NUMBER (12) NULL , EquationOrFilter CLOB NULL , IsPrimaryX NUMBER (5) DEFAULT 0 NOT NULL , Permissions VARCHAR2 (500) NULL , PRIMARY KEY ( ItemId ) ) ;
Puis la table a été peuplée. Elle est peuplée via une application .NET pour lequel je n’ai pas de détail.
Via l’application en question je remplis notamment le champ EquationOrFilter qui est de type CLOB et qui me pose problème. Certain des enregistrements comportent des caractères accentués.
Par example
donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part select ItemId,EquationorFilter from GRAPHSERIES where Itemid=9614;
Ce résultat me convient : j’obtiens bien ce que j’ai saisi via mon application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ITEMID EQUATIONORFILTER ---------- -------------------------------------------------------------------------------- 9614 ééàà
Le problème commence lorsque je passe la commande suivante:
car le résultat est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 declare o CLOB; BEGIN select EQUATIONORFILTER into o from GRAPHSERIES where Itemid=9614; END; /
Mon premier problème est que je ne comprends pas pourquoi j’ai ce message d’erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ERREUR à la ligne 3 : ORA-06550: line 3, column 8: PL/SQL: ORA-12704: character set mismatch ORA-06550: line 3, column 1: PL/SQL: SQL Statement ignored
Passons au second problème :
Si je lance la commande
Puis
Code : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE GRAPHSERIES SET EQUATIONORFILTER= 'abcàéè' where Itemid=9614;
Le résultat est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select ItemId,EquationorFilter from GRAPHSERIES where Itemid=9614;
Je n’ai pas mes accents !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ITEMID EQUATIONORFILTER ---------- -------------------------------------------------------------------------------- 9614 abcaee
Pourquoi ?
Je passe alors à mon 3eme problème :
J’ai recréé une autre table sur le même modèle
J’ai ajouté un enregistrement, puis j’ai effectué les mêmes manipulation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE opi ( ItemId NUMBER (12) NOT NULL , DataBaseID NUMBER (12) NULL , EquationOrFilter CLOB NULL , IsPrimaryX NUMBER (5) DEFAULT 0 NOT NULL , Permissions VARCHAR2 (500) NULL , PRIMARY KEY ( ItemId ) ) ;
Puis
Code : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE opi SET EQUATIONORFILTER= 'abcàéè' where Itemid=1;
Résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part select ItemId,EQUATIONORFILTER from opi where Itemid=1;
Là j’ai bien mes accents!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ITEMID EQUATIONORFILTER ---------- -------------------------------------------------------------------------------- 1 abcàéè
Pourquoi dans le cas précédent je n’ai pas mes accents alors que là je les ai !
La seul différence entre les 2 tables (enfin pour moi) c’est que la première à été créé sous Oracle 8 et avec un jeu de caractère qui à l’époque était différent.
Partager