|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Bonjour,
J'ai deux bases sql server 2008R2 (BD1 et DB2). Je souhaite sélectionner des données dans DB1 et les insérer dans BD2. Ex : Dans BD1, table salarié avec champs nom et prénom Quand je récupère ces données, pb avec les caractères spéciaux qui s'affichent avec un "?". Je passe donc par un encodage : Code :
Une fois que j'ai mes données qui s'affichent correctement, je fais un UPDATE vers DB2 : Code :
Auriez-vous une solution à ce problème? Merci d'avance |
||||
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : juin 2006 Messages : 737 ![]() |
Salut !
Un PreparedStatement pourrait-il faire l'affaire ? |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Merci de ta réponse, je vais tester !
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 331 ![]() |
A priori c'est pas top de gérer l'encoding comme tu le fais. La "bonne" façon de procéder, c'est de spécifier l'encoding dans la chaîne de connection JDBC (cf la doc de ton driver JDBC)
__________________
Program manager chez TraceOne. http://www.traceone.com |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() |
En faisant ça
Code :
String prenom = new String(resultSet.getBytes("PRENOM_SALARIE"),"ISO-8859-1"); Il faut faire les opération suivante: 1) s'assurer que les données ne sont pas déjà corrompue sur la première base de données. Selon la même bidouille que tu fais, ça peux être le cas même sans s'en rendre compte. (Ton interface graphique habituelle merdouille symétriquement et donc "corrige" les données corrompue à l'affichage). Le plus simple pour ce check est de prendre un chaine contenant, par exemple Ä ou Ü ou d'autres caractères n'existant pas en iso-8859-1, de l'y stocker avec l'interface habituelle, et de lancer une requete SQL qui compte les caractères ou qui convertis en caractères non accentués ou qui, pour chaque caractère de la chaine, affiche sa valeur unicode. Tu saura tout de suite si le SGBD vois bien ce que tu pense qu'il vois 2) comme dit, voir dans la config de ton driver si il parle bien le même encoding que la DB (souvent, c'est automatique, mais je ne connais pas SQL server) 3) voir si c'est pas au transfert vers la deuxième DB que tu aurais le problème inverse (Envoyer une chaine connue genre "Héhéhé höµhòhó" et regarder si ça arrive correctement) 4) voir si c'est pas à l'affichage final que tu as le problème.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Le preparedstatement n'a rien fait de mieux!
Concernant l'encodage de la connexion j'ai tenté de rajouter "charset=UTF-8" à la fin de ma chaîne de connexion, sans succès. J'ai épluché la doc de mon driver (sqljdbc4.jar) et rien trouvé pour renseigner l'encodage. Je continue de chercher. Merci à vous |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
J'avais pas vu ta réponse tchize_, je teste tout ça, merci.
|
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Une info qui peut, peut être, avoir son importance, quand je retire toute les conversions dans mon code et que j'affiche les données de mon select depuis ma première BD (d'où je tire mes données), tous les caractères spéciaux s'affichent avec un "?".
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() |
Ils s'affichent dans la console? Si tu fais System.out.println(" <\u00e9>") ça affiche quoi?
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Oui dans la console d'eclipse.
Il m'affiche bien <é> si je fais un System.out.println(" <\u00e9>"). |
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() |
ok, donc le probleme est entre ton code et la DB numéro 1. Maintenant va falloir vérifier que les données sont correctes dans le DB1. Si c'est le cas, le problème est dans le tube du driver jdbc.
Tu utilise quel driver?
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#12 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Le driver est sqljdbc4.jar.
Concernant la BD1, quand je fais un insert avec un é, le champs s'affiche correctement, par contre si je fais un insert avec un é, il s'affiche avec é. |
|
|
00
|
|
|
#13 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
![]() Bon, est-ce que si tu lance ton application en rajoutant aux paramètres de la JVM tu résoud ton problème? Javais eu une galère similaire sur oracle et j'ai découvert que le driver n'était pas configurable à ce sujet et utilisait... L'encodage par défaut de la plateforme ![]() Sinon, ton driver a un paramètre "SendStringParametersAsUnicode" qu'on peux mettre à true (sa valeur par défaut normalement). tu peux jouer aussi à le mettre à false :s Il y a aussi CodePageOverride mais là je le sent pas trop
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
|
00
|
|
|
#14 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
J'avais déjà essayé le
Sans succès malheureusement. Je vais tester le SendStringParametersAsUnicode. Merci |
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Me revoici pour de nouvelles aventures !
Mes tests avec SendStringParametersAsUnicode n'ont rien donnés. J'ai testé de transposer mon code en PHP (au point où j'en suis je ne suis plus à ça près) et la bingo ça passe avec les bons caractères spéciaux. Mes pages sont en UTF-8. Une idée ? Merci |
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 1 318 ![]() |
Si tes 2 bases sont sur le même serveur, alors :
Code :
Pour de plus amples précisions poster sur le forum SQL Server Dans ce cas, rien à voir avec Java !
__________________
·· −· −−· ·· ·−· ··− −− ·· −− ··− ··· −· −−− −·−· − · · − −·−· −−− −· ··· ··− −− ·· −− ··− ·−· ·· −−· −· ·· D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
||
|
|
00
|
|
|
#17 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Merci de ta réponse.
Mais je pense que le pb vient de java puisqu'en PHP mes données s'affichent correctement et pas en java (par ex "é" remplacé par "?" dans la console alors que le champ en base est correctement écrit). Effectivement l'update en sql est plus performant mais je réalise d'autres traitements (non présentés ici pour ne pas surcharger ma demande) qui me demandent de passer par une couche métier, d'où le pourquoi du code java. Merci |
|
|
00
|
|
|
#18 |
|
Invité régulier
![]() Inscription : septembre 2010 Messages : 51 ![]() |
Après de nouveaux tests, le pb vient de ma lecture des infos dans ma base où les caractères spéciaux s'affichent '?'.
Base : SQL Server 2008 Management Studio 10.0.1600.22 Driver : sqljdbc4.jar Java : 6 (mise à jour 26) Eclipse EE Juno Merci |
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() Développeur java, access, sql server Inscription : octobre 2005 Messages : 1 318 ![]() |
En relisant le début de ton post, tu indiques que les champs de la table sont codés en "French_CI_AS" (voir SQL PRO)
Il y a peut-être un conflit avec l'encodage par défaut du serveur. tu pourrais peut-être : 1) créer une table temporaire de la même structure mais avec tous les champs varchar encodés autrement 2) importer les données dans la table temporaire 3) travailler avec cette table temp.
__________________
·· −· −−· ·· ·−· ··− −− ·· −− ··− ··· −· −−− −·−· − · · − −·−· −−− −· ··· ··− −− ·· −− ··− ·−· ·· −−· −· ·· D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser. First, make it work. Then, make it fast. Finally, make it user-friendly. Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich. |
|
|
00
|
|
|
#20 | ||
|
Expert Confirmé Sénior
![]() ![]() |
On n'a toujours pas testé le données en base, juste leur affichage à gauche et à droite.
Peux-tu prendre une chaine déjà erronée en base, admettons que ce soit le 4ème caractère du champ Prenom, et dans editeur sql quelconque, lance la commande suivante: Code :
Dis nous en comparaison ce que ça affiche depuis java.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com