SQL Loader - problème d'encodage des caractères accentués

SQL Loader - problème d'encodage des caractères accentués - SQL/NoSQL - Programmation

Marsh Posté le 15-05-2008 à 11:40:12    

Bonjour,
 
J'ai un problème d'encodage de caractère avec le Sql Loader.
 
Dans mon fichier plat, j'ai une chaine de type :
...;réorganisation du réseau 5ème;...
 
Avec le sqlldr d'Oracle 8i, je retrouve cette chaine en base :
...;riorganisation du riseau 5hme;...
 
Avec le sqlldr d'Oracle 10g, je retrouve cette chaine en base :
...;r¿organisation du r¿seau 5¿me;...
 
Et c'est pareil pour tous les caractères accentués, et d'autres encore.
 
Qu'est-ce qui entraine une telle différence ?
Y a-t-il une solution pour encoder correctement lors de l'intégration (fonction Oracle ou autre) ?
 
Merci d'avance  :)

Reply

Marsh Posté le 15-05-2008 à 11:40:12   

Reply

Marsh Posté le 15-05-2008 à 12:00:10    

il faut certainement voir les parametres NLS de ton instance et également ceux lors de ta session lors du chargement.

Reply

Marsh Posté le 15-05-2008 à 16:13:16    

Je viens de me renseigner sur les paramètres NLS, et de regarder mon NLS_CHARACTERSET. Pour la base (NLS_DATABASE_PARAMETERS), sa valeur est 'WE8ISO8859P1'.
Par contre, pour l'instance et la session, il ne me renvoie rien.
 
J'ai trouvé une doc (http://fadace.developpez.com/oracle/nls/) qui semble exposer le problème... mais je ne suis pas sûr de tout saisir.
Comment faire pour changer ce paramètre NLS_CHARACTERSET de manière provisoire ?
 
Merci encore !! :jap:

Reply

Marsh Posté le 15-05-2008 à 16:24:41    

josserand_joss a écrit :


Comment faire pour changer ce paramètre NLS_CHARACTERSET de manière provisoire ?
 
Merci encore !! :jap:


alors déjà veux tu modifier le charset en UTF-16 (AL16UTF16). si oui, alors oublie NLS_CHARACTERSET et modifie plutot NLS_NCHAR_CHARACTERSET (c'est le charset des types NCHAR, NVARCHAR...). sinon c'est bien NLS_CHARACTERSET
pour le modifier, ça dépend de ta version d'Oracle : ALTER DATABASE CHARACTER SET jusqu'à Oracle 9, ou CSALTER pour Oracle 10 et suivants

Reply

Marsh Posté le 15-05-2008 à 17:47:08    

A vrai dire, je ne saurais pas répondre à ta question, dans le sens où je ne connais pas le comportement du SQL Loader (et encore moins le type de données qu'il considère). Car c'est bien là que le problème se pose (cf mon premier message).
Donc, c'est une conversion des données le temps d'un chargement qui m'intéresse. Je ne souhaite pas convertir la base entière.
 
Je suis en train de tester la fonction convert... Je ne sais pas si je vais trouver mon bonheur de ce côté.
Je continue mes recherches.
 
Si vous avez encore des idées ou des solutions, je surveille :ange:  
 
Merci merci !

Reply

Marsh Posté le 15-05-2008 à 17:49:15    

non mais l'encodage du fichier plat, c'est quoi ? de l'UTF-8 ? 16 ?

Reply

Marsh Posté le 15-05-2008 à 18:07:52    

Euh... Comment on fait pour voir l'encodage d'un fichier plat ? :lol:

Reply

Marsh Posté le 15-05-2008 à 18:14:01    

regarde le fichier dans un éditeur héxa, et regarde les 1ers octets :
 
- FF FE = UTF-16 Low Endian
- FE FF = UTF-16 Big Endian
- EF BB BF = UTF-8

Reply

Marsh Posté le 16-05-2008 à 10:22:56    

Euh... Le début de mon fichier en Héxa est bien différent. D'ailleurs, il correspond au contenu du fichier, et non à quelconque méta-données.
Il me semblait d'ailleurs qu'un fichier plat n'avait rien d'autre que du contenu (pas d'informations autres)... Mais je dois me tromper.
 
Je suis sur une nouvelle (et bonne ?) piste : directement définir le type d'encodage dans le fichier CTL.
... à suivre ...

Reply

Marsh Posté le 16-05-2008 à 10:25:50    

josserand_joss a écrit :


Il me semblait d'ailleurs qu'un fichier plat n'avait rien d'autre que du contenu (pas d'informations autres)... Mais je dois me tromper.


c'est effectivement le cas, mais ce contenu, c'est du texte, et il faut bien que ce texte soit encodé dans un charset. les "informations autres" dont tu parles sont définies par le charset, et pas par le format de fichier

Reply

Marsh Posté le 16-05-2008 à 10:25:50   

Reply

Marsh Posté le 16-05-2008 à 12:24:57    

Ok, merci pour l'info.
 
Bon, ma piste piste s'est avérée bonne.
Dans le fichier CTL, après le LOAD DATA, j'ai rajouté la ligne CHARACTERSET WE8ISO8859P1 (qui correspond à l'encodage de la base de données cible). Et ça marche !
 
Merci à tous ! :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed