IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Import/Export Oracle Discussion :

Problème de caractères 8i/10g


Sujet :

Import/Export Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut Problème de caractères 8i/10g
    Bonjour,

    J'ai un problème d'import ou plus exactement de restitution à l'écran de caractères accentués ou spéciaux.
    par exemple : le "é" apparait comme un "i" ou le "°" apparait comme un "0".

    L'export vient d'un serveur Unix en Oracle 8.1.7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SQL> * from nls_database_parameters;
     
    PARAMETER                      VALUE
    ------------------------------ --------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               US7ASCII
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZH:TZM
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZH:TZM
    NLS_DUAL_CURRENCY              $
    NLS_COMP                       BINARY
    NLS_NCHAR_CHARACTERSET         US7ASCII
    NLS_RDBMS_VERSION              8.1.7.0.0
    A priori, le NLS_LANG n'est pas défini sur l'UNIX uniquement le ORA_NLS33.

    Et l'export se fait sur un Windows 2003 SP2 en Oracle 10.2.0.4.0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
      1* select * from nls_database_parameters
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               US7ASCII
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY              $
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
    NLS_NCHAR_CHARACTERSET         AL16UTF16
    NLS_RDBMS_VERSION              10.2.0.4.0

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Il y a un problème de fond: si la base a le jeu de caractères US7ASCII elle ne peut pas stocker correctement de caractères accentués puisque US7ASCII ne comporte pas ces caractères. Vos données sont incohérentes car vous avez probablement NLS_LANG positionné à US7ASCII et dans ce cas Oracle ne vérifie pas que les données entre le client et la base

    Voir le tutoriel NLS: http://fadace.developpez.com/oracle/nls/.

    Il faut envisager un changement de jeu de caractères avec correction des données ...

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    Merci pour votre réponse, mais c'est très étrange car j'ai bien des accents sur l'ancienne base sur l'UNIX... ???

  4. #4
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    De plus, ce n'est que à la reprise (import) des données que cela ne fonctionne pas car à l'insertion de nouvelles données, j'ai bien mes accents...

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Vérifiez avec la fonction DUMP le véritable contenu d'une colonne.
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    SQL> select * from nls_database_parameters where parameter like '%SET%';
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_CHARACTERSET               WE8ISO8859P15
    NLS_NCHAR_CHARACTERSET         AL16UTF16
     
    SQL> create table t2(x varchar2(10));
     
    Table created.
     
    SQL> insert into t2 values ('é');
     
    1 row created.
     
    SQL> select * from t2;
     
    X
    ----------
    é
     
     
    SQL> select dump(x,1017) from t2;
     
    DUMP(X,1017)
    --------------------------------------------------------------------------------
    Typ=1 Len=1 CharacterSet=WE8ISO8859P15: e9
    Dans votre cas, comparez avec la table ASCII le code caractère accentué stocké dans la base.

    Les 2 causes probables de votre problème:
    • un jeu de caractères de la base incorrect
    • ET
    • un mauvais paramètrage de NLS_LANG.


    Pour résoudre votre problème, il faut prendre en compte les 2 causes.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    Merci pour votre réponse.

    Voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    SQL> SELECT * FROM nls_database_parameters WHERE parameter LIKE '%SET%';
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_CHARACTERSET               WE8MSWIN1252
    NLS_NCHAR_CHARACTERSET         AL16UTF16
     
    SQL> CREATE TABLE t2(x varchar2(10));
     
    Table créée.
     
    SQL> INSERT INTO t2 VALUES ('é');
     
    1 ligne créée.
     
    SQL> SELECT * FROM t2;
     
    X
    ----------
    é
     
    SQL> SELECT dump(x,1017) FROM t2;
     
    DUMP(X,1017)
    ------------------------------------------------------------------------
    Typ=1 Len=1 CharacterSet=WE8MSWIN1252: e9
    Qu'en pensez-vous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
    Et quand j'interroge une donnée importée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select mon_champ from ma_table where critere=X;
    
    champ
    ----------------------------------------
    Cr¿pin
    
    au lieu de Crépin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de caractère ?
    Par Leishmaniose dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 07/11/2006, 17h29
  2. Réponses: 1
    Dernier message: 02/02/2006, 23h12
  3. problème de caractères clavier!!!
    Par brunetc dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/06/2005, 13h39
  4. [SQL Server] problème de caractères spéciaux
    Par mbibim63 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 02/06/2005, 18h38
  5. [MiniPascal] Problème de caractères accentués
    Par Clandestino dans le forum Autres IDE
    Réponses: 3
    Dernier message: 03/10/2004, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo