Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/10/2007, 16h05   #1
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 10h43   #2
Membre du Club
 
Inscription : mai 2005
Messages : 134
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 134
Points : 50
Points : 50
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à.
jokos2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 10h55   #3
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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 :
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 :
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
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 12h42   #4
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 12h59   #5
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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 :
NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252
merci
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 16h27   #6
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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 :
SELECT * FROM nls_database_parameters WHERE parameter LIKE '%SET%';
Que donne:
Code :
1
2
 
SELECT dump(<colonne>, 1017) FROM <table> WHERE <...>;
sur une colonne contenant un caractère accentué qui est mal affiché ?
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 16h35   #7
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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 :
SELECT * FROM nls_database_parameters WHERE parameter LIKE '%SET%';
Que donne:
Code :
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 :
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 :
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
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 16h51   #8
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2007, 16h54   #9
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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...
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 09h59   #10
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 09h36   #11
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 11h28   #12
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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 ?
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 15h35   #13
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 16h17   #14
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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 :
SET NLS_LANG=FRENCH_FRANCE.WE8PC850
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 16h44   #15
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
Je vient d'insérer une ligne en ligne de commande (sans toad) comme ceci:
Code :
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 :
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...
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 16h50   #16
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
Citation:
Envoyé par mika0102 Voir le message
Je vient d'insérer une ligne en ligne de commande (sans toad) comme ceci:
Code :
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 :
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 :
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
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 17h23   #17
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h35   #18
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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...
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 14h35   #19
Membre régulier
 
Homme Michaël Hardy
Développeur informatique
Inscription : février 2005
Messages : 217
Détails du profil
Informations personnelles :
Nom : Homme Michaël Hardy
Âge : 32
Localisation : Belgique

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

Informations forums :
Inscription : février 2005
Messages : 217
Points : 86
Points : 86
Envoyer un message via MSN à mika0102
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 :
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
mika0102 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 17h02   #20
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h46.


 
 
 
 
Partenaires

Hébergement Web