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

Oracle Discussion :

[Oracle - odbc]Perte des accents


Sujet :

Oracle

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut [Oracle - odbc]Perte des accents
    Bonjour,

    J'ai créé un schéma avec des tables dans ma base de données oracle 10g.
    J'insère des données dans ces tables dont certaines avec des caractères accentués (ex: amélioration).

    J'accède à ma BD avec une connexion odbc et lorsque je fait un select sur ma table, je perd l'accent et je me retrouve avec "amelioration".

    Quelqu'un peut-il m'aider?

    Je précise que si j'accède à ma base avec sql+ je perd également mes accents mais avec entreprise manager tout est correct.

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 134
    Par défaut
    Bonjour,

    Tu dois avoir soit :

    - ta variable NLS_LANG diffère entre le client et la base. (le problème viendrait du client)
    - les paramètres NLS de la base ne sont pas compatibles avec les accents (le problème viendrait de la base)

    Vérifie de ce côté là.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par jokos2000 Voir le message
    Bonjour,

    Tu dois avoir soit :

    - ta variable NLS_LANG diffère entre le client et la base. (le problème viendrait du client)
    - les paramètres NLS de la base ne sont pas compatibles avec les accents (le problème viendrait de la base)

    Vérifie de ce côté là.
    Si j'accède à la base de ma machine en sql+ ou autre, cela fonctionne mais si j'essaye d'interroger cette même base de mon serveur de production je ne visualise pas les mêmes résultats.

    Exemple de ma machine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> select titre from news;
     
    TITRE
    ----------------------------------------------------
    Conseil d'administration du GIG
    Nouveau serveur pour les applications GIG
    Nouveau nom de domaine pour le site web du GIG
    Foire de Libramont
    Journée d'informations aux communes
    Amélioration de l'application "Matrice Cadastrale"
     
    6 ligne(s) sélectionnée(s).
    Exemple du serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select titre from news;
    TITRE
    -----------------------------------------------------
    Conseil d'administration du GIG
    Nouveau serveur pour les applications GIG
    Nouveau nom de domaine pour le site web du GIG
    Foire de Libramont
    Journee d'informations aux communes
    Amelioration de l'application "Matrice Cadastrale"
     
    6 rows selected.
    On remarque qu'il interprète le caractère "é" en "e".

    Ce n'est donc pas au niveau de a base de données je pense mais peut-être bien sur le client mais je ne voit pas trop où?

    Merci

  4. #4
    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
    Sous Unix, vérifiez la valeur de la variable d'environnement NLS_LANG.
    Sous Windows, vérifiez la clé de registre NLS_LANG.

    Voir aussi le tutoriel NLS pour plus de détails.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par pifor Voir le message
    Sous Unix, vérifiez la valeur de la variable d'environnement NLS_LANG.
    Sous Windows, vérifiez la clé de registre NLS_LANG.

    Voir aussi le tutoriel NLS pour plus de détails.
    Je suis sous windows 2003 serveur.

    Voici la valeur de mon NLS_LANG

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252
    merci

  6. #6
    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
    La valeur de NLS_LANG donnée: c'est sur le serveur ou sur le client ?

    Quel est le jeu de caractère de la base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from nls_database_parameters where parameter like '%SET%';
    Que donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select dump(<colonne>, 1017) from <table> where <...>;
    sur une colonne contenant un caractère accentué qui est mal affiché ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par pifor Voir le message
    La valeur de NLS_LANG donnée: c'est sur le serveur ou sur le client ?

    Quel est le jeu de caractère de la base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from nls_database_parameters where parameter like '%SET%';
    Que donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select dump(<colonne>, 1017) from <table> where <...>;
    sur une colonne contenant un caractère accentué qui est mal affiché ?
    Le nls_lang de mon post précédent est celui du client.

    Voici le résultat de la 1ere requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> SELECT * FROM nls_database_parameters WHERE parameter LIKE '%SET%';
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_CHARACTERSET               WE8MSWIN1252
    NLS_NCHAR_CHARACTERSET         AL16UTF16
    2ème requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> SELECT dump(titre, 1017) FROM news where news_id = 6;
     
    DUMP(TITRE,1017)
    --------------------------------------------------------------------------------
    Typ=1 Len=50 CharacterSet=WE8MSWIN1252: A,m,e9,l,i,o,r,a,t,i,o,n, ,d,e, ,l,',a,p
    ,p,l,i,c,a,t,i,o,n, ,",M,a,t,r,i,c,e, ,C,a,d,a,s,t,r,a,l,e,"
    On voit qu'il interprète le 'é' en 'e9'.

    Quel serait la cause de ce phénomène?
    Merci

  8. #8
    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
    Si la partie jeu de caractères de NLS_LANG correspond au jeu de caractères de la base (ce qui est votre cas), Oracle ne vérifie pas forcément la validité des caractères envoyés par le client et stockés dans la base. Vous avez probablement un client Oracle (un programme qui se connecte à la base) qui insére des données accentuées de façon incorrecte.

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par pifor Voir le message
    Si la partie jeu de caractères de NLS_LANG correspond au jeu de caractères de la base (ce qui est votre cas), Oracle ne vérifie pas forcément la validité des caractères envoyés par le client et stockés dans la base. Vous avez probablement un client Oracle (un programme qui se connecte à la base) qui insére des données accentuées de façon incorrecte.
    Ben pour insérer les données dans oracle j'utilise toad. Mais ce qui est bizarre c'est que lorsque je consulte ces données de ma machine avec soit toad soit sql+, je voit mes accents...

  10. #10
    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
    Vous perdez des accents ... et moi j'y perds mon latin car selon vos messages, il y a des cas qui marchent avec SQL*Plus et d'autres qui ne marchent pas

    Pouvez-vous préciser pour chaque test:
    • le système utilisé (client ou serveur)
    • la valeur de NLS_LANG
    • le client utilisé (SQL*Plus en mode caractère, SQL*Plus en mode graphique, etc.)
    • ce qui marche et ce qui ne marche pas.

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par pifor Voir le message
    Vous perdez des accents ... et moi j'y perds mon latin car selon vos messages, il y a des cas qui marchent avec SQL*Plus et d'autres qui ne marchent pas

    Pouvez-vous préciser pour chaque test:
    • le système utilisé (client ou serveur)
    • la valeur de NLS_LANG
    • le client utilisé (SQL*Plus en mode caractère, SQL*Plus en mode graphique, etc.)
    • ce qui marche et ce qui ne marche pas.
    Hum pour être franc j'y perd également mon latin. :scarymov

    Bon je vais répondre à vos questions.

    1. Système utilisé:

    Serveur: windows2003 serveur
    Client 1 (ca marche): Windows XP Pro
    Client 2 (perte des accents): Windows 2003 serveur

    2. NLS_LANG:

    Serveur:AMERICAN_AMERICA.WE8MSWIN1252
    Client 1 (ca marche): FRENCH_FRANCE.WE8MSWIN1252
    Client 2 (perte des accents): AMERICAN_AMERICA.WE8MSWIN1252

    3. Clients utilisés:

    Sql+ en mode caractère sur les 2 clients
    toad pour insérer mes données dans les tables.

    4. Cela fonctionne sous le client 1 mais pas sous le client 2.
    Etant donné que le client 2 est mon serveur de production, je ne retrouve pas mes accents dans mes applications.

    Voilà j'espère avoir été assez clair.

    Merci d'avance

  12. #12
    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
    Est-ce que vous parlez bien des données dans la base ou des messages de SQL*Plus ? Est-ce que vous avez vérifié dans les 2 cas comment sont stockés les caractères accentués dans la base avec la fonction SQL DUMP ?

  13. #13
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par pifor Voir le message
    Est-ce que vous parlez bien des données dans la base ou des messages de SQL*Plus ? Est-ce que vous avez vérifié dans les 2 cas comment sont stockés les caractères accentués dans la base avec la fonction SQL DUMP ?
    Je parle des données qui sont stockées dans la base oracle.
    Oui j'ai fait le sql dump dans les 2 cas et le résultat est le même que dans un de mes posts précédent

  14. #14
    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
    C'est peut-être qui est mal configuré

    Essayez de rentrer les données avec sqlplus.exe démarré depuis cmd.exe
    en positionnant d'abord dans la fenêtre DOS NLS_LANG à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set NLS_LANG=FRENCH_FRANCE.WE8PC850

  15. #15
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Je vient d'insérer une ligne en ligne de commande (sans toad) comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> INSERT INTO news
      2                     (NEWS_ID,news,news_date,titre,img,link,type,date_debut,date_fin)
      3         VALUES (sequ_news.nextval,'éééeeetàà','','éééeeetàà','','',1,'','');
     
    1 ligne créée.
    Voici le résultat de mon select dans le cas ou cela ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> select titre from news;
     
    TITRE
    ---------------------------------------------------
    Conseil d'administration du GIG
    Nouveau serveur pour les applications GIG
    Nouveau nom de domaine pour le site web du GIG
    Foire de Libramont
    Journee d'informations aux communes
    Amelioration de l'application "Matrice Cadastrale"
    eeeesdf
     
    7 rows selected.
    j'avais d'abord changé la valeur de mon nls_lang afin qu'il soit le même que sur le serveur car je pensais que cela pouvait venir de là mais sans résultat probant...

  16. #16
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par mika0102 Voir le message
    Je vient d'insérer une ligne en ligne de commande (sans toad) comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> INSERT INTO news
      2                     (NEWS_ID,news,news_date,titre,img,link,type,date_debut,date_fin)
      3         VALUES (sequ_news.nextval,'éééeeetàà','','éééeeetàà','','',1,'','');
     
    1 ligne créée.
    Voici le résultat de mon select dans le cas ou cela ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> select titre from news;
     
    TITRE
    ---------------------------------------------------
    Conseil d'administration du GIG
    Nouveau serveur pour les applications GIG
    Nouveau nom de domaine pour le site web du GIG
    Foire de Libramont
    Journee d'informations aux communes
    Amelioration de l'application "Matrice Cadastrale"
    eeeesdf
     
    7 rows selected.
    j'avais d'abord changé la valeur de mon nls_lang afin qu'il soit le même que sur le serveur car je pensais que cela pouvait venir de là mais sans résultat probant...
    Par contre je vient de faire le test de l'insert sur mon client 2 et voici ensuite le résultat du select:
    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
     
    SQL> select titre from news;
     
    TITRE
    -------------------------------------------------------
    Conseil d'administration du GIG
    Nouveau serveur pour les applications GIG
    Nouveau nom de domaine pour le site web du GIG
    Foire de Libramont
    Journee d'informations aux communes
    ???eeet??
    ???eeet??
    Amelioration de l'application "Matrice Cadastrale"
    eeeesdf
     
    9 rows selected.
    Il a remplacé mes caractères accentués par un "?".

    Je commence vraiment à m'embrouiller les pinceaux.... grrrr

  17. #17
    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
    Si vous être vraiment sûr de la variable d'environnement NLS_LANG et du jeu de caractères de la base, je n'ai plus d'explication à vous proposer ...

    Vous pouvez aussi essayer de poster votre message en anglais sur le forum OTN dédié à ces problèmes.

  18. #18
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par pifor Voir le message
    Si vous être vraiment sûr de la variable d'environnement NLS_LANG et du jeu de caractères de la base, je n'ai plus d'explication à vous proposer ...

    Vous pouvez aussi essayer de poster votre message en anglais sur le forum OTN dédié à ces problèmes.
    pfff c'est toujours sur moi que cela tombe les problèmes sans solution....

    Merci de t'être intéressé à mon cas...

  19. #19
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Par défaut
    Citation Envoyé par mika0102 Voir le message
    pfff c'est toujours sur moi que cela tombe les problèmes sans solution....

    Merci de t'être intéressé à mon cas...
    J'ai trouvé une solution provisoire à mon problème.
    Dans mes tables, lorsque j'encode des données il faut que je mette le code HTML des caractères accentués et cela marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ex:
     
    é => &eacute;
    à => &agrave;
    Afin de m'éviter ce problème n'existe pas un outil pour le contourner et lorque j'encode "é", il insère automatiquement le code html du caractère?

    Ou alors au niveau de la configuration oracle, y a-t-il un paramètre à configurer pour qu'il interprète correctement mes caractères?

    Merci d'avance

  20. #20
    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
    Au niveau du client Oracle, le seul paramètre qui compte en général est NLS_LANG. Dans le cas d'une application web, il faut être sûr que le serveur web (qui est ici le client Oracle) a la bonne valeur pour NLS_LANG au démarrage du serveur web (après, c'est trop tard).

    Exception: JDBC ne prend pas en compte NLS_LANG.

Discussions similaires

  1. Perte des accents entre XML et javascript
    Par jejeman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/10/2008, 16h59
  2. Export/import de 8i ver 9i et perte des accents
    Par Pilru dans le forum Administration
    Réponses: 10
    Dernier message: 18/09/2007, 12h05
  3. Perte des accents et autres caractères spéciaux.
    Par pacific dans le forum Coldfusion
    Réponses: 1
    Dernier message: 19/07/2007, 02h17
  4. [WebForms]Perte des accents dans Request.QueryString
    Par Matth_S dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/11/2006, 19h21
  5. [vb.net][StreamReader] perte des accents
    Par arnolem dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/02/2006, 18h30

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