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

JDBC Java Discussion :

Requete avec des caractéres capricieux


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 37
    Par défaut Requete avec des caractéres capricieux
    Bonjour,
    voici mon problème : lorsque je veux insérer des valeurs accentuées (comme "ñ" ou "è")dans les champs de ma table ceux-ci sont remplacés par "?". Un simple problème d'encodage vous allez me dire, sauf que je n'ai le problème que pour certains caractères spéciaux : ñ, è, ì, à, ò, ù, È alors que par exemple é, ú, í, ó, á, É ne posent pas de soucis(ce qui serait le cas avec un simple problème d'encodage, non ?)

    De plus j'affiche ma requête avant de l'exécuter et celle-ci est correcte quand je l'exécute via MySQL Browser Query il n'y a aucun soucis. Le driver jdbc pourrait-il transformer certains caractères ou alors qu'il y ai un bug dans le driver ? (bien que j'ai deja changé de version de driver...)

    J'espère sincèrement que l'un d'entre vous pourra m'aider.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si tu précisais déjà, quel encodage tu utilise pour le stockage dans la db et quel encodage tu utilise pour la communication entre client et serveur?

    Si tu prend un mauvais encodage, par exemple, la réprésentation binaire de É correspond peut etre à autre chose alors que la réprésentation binaire de È est invalide. Du coup, il stocke les bits envoyés pour É mais pas ceux envoyés pour È (=> ?). Quand il récupère É lors des select, il fait "l'erreur" inverse, tandis que pour È l'erreur inverse d'un truc modifié par la db çà correspond plus à rien.

    Donc c'est pas parce que É passe que ton encodage est correct, çà dit juste que tu utilise le meme encodage pour le update et le select et que la réprésentation binaier a été digérée non modifiée par le serveur, peu importe ce qu'il a réellement vu dans ces bits

    Personellement, je suis pour le tout à l'UTF-8 (encodage des tables, encodage de la connection, encodage des formulaires web) çà résoud pas mal de problèmes

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 37
    Par défaut
    Tout d'abord merci pour ta réponse et ensuite désolé pour cet oubli de ma part.
    J'ai donc mis en utf-8 mes jsp et ma base.

    Qu'est ce que tu entend par encodage de la connexion ? Préciser dans l'url l'encodage ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par maxr397 Voir le message
    Tout d'abord merci pour ta réponse et ensuite désolé pour cet oubli de ma part.
    J'ai donc mis en utf-8 mes jsp et ma base.

    Qu'est ce que tu entend par encodage de la connexion ? Préciser dans l'url l'encodage ?
    oui, sinon tu risque de cause de travers

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 37
    Par défaut
    J'avais essayé de rajouter ceci à mon url : useUnicode=true&characterEncoding=UTF-8. Malheureusement ça n'a rien changer.
    Voici un récapitulatif de tout ce que j'ai fait :
    • vérifier que mes fichiers sources sont bien en UTF-8
    • ma base de données est bien elle aussi en utf8
    • pour ma page jsp, j'ai bien :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      <?xml version="1.0" encoding="UTF-8" ?>
      <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      <meta http-equiv="Content-Type" content="text/html; UTF-8" />
      (tout n'est bien sur pas à la suite comme ici)

    • du coté de la servlet :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      request.setCharacterEncoding("UTF-8");
              response.setContentType("text/html;charset=UTF-8");


    Je commence à m'y perdre un peu par rapport à tout ce que j'ai essayé. Ce que je ne comprend pas, c'est que j'affiche ma requête avant de faire "executeUpdate" et il n'y a pas de problème pour aucun champ : tous les caractères sont bien accentués. C'est lorsque je consulte ma bd que je m'apercois que certains caractères ont été modifié.

    Merci encore (je croise les doigts pour que quelqu'un me mette sur la piste)

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tout m'a l'air bien coté client. T'as vérifié l'encodage des tables (pas de la base!), si ma mémoire est bonne, sous mysql, tu peux avoir un encodage différent par table (voir je me demande meme si tu peux pas en avoir un différent pas champ). Essaie de voir

    1) si tu fait un insert depuis phpmyadmin, est-ce que c'est correct? Arrive tu à l'afficher depuis tes pages web?
    2) si tu fait l'insert depuis la page web, arrive tu a lire les datas depuis phpmyadmin?

Discussions similaires

  1. Requetes avec des dates
    Par PrinceMaster77 dans le forum SQL
    Réponses: 1
    Dernier message: 22/11/2004, 17h46
  2. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  3. Creer une requete avec des LEFT JOIN et des GRO
    Par donbuz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2004, 15h53
  4. Chaînes avec des caractères accentués dans Interbase
    Par Invité dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39
  5. Requete avec des décimales
    Par Sandrine75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/06/2003, 10h18

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