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

Requêtes MySQL Discussion :

Problème d'encodage mysql


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 84
    Points
    84
    Par défaut Problème d'encodage mysql
    Bonjour,
    j'ai un problème avec les caractères accentués avec mysql.
    J'ai une application JSP qui tourne sur un serveur tomcat sur linux qui fait des accès à une base mysql.
    J'ai essayé de regarder la FAQ et de regarder différents sujets traitant du même problème, mais je n'ai trouvé aucune solution à mon problème.

    En fait, lorsque je me connecte à mon application, j'ai par exemple les caractères suivant qui apparaissent :

    Bouches du Rhône (13)
    Microsoft® Windows®
    ou encore
    Disque dur : 160Go à 7200 tr/mn

    Je voudrais bien sur que l'affichage des accents se passe sans problème, mais je n'arrive pas à mettre le doigt sur l'option à modifier pour y arriver ...

    POurriez vous me conseiller s'il vous plait ?

    Nicolas

    [EDIT] Si çà peut vous aider, quelques infos supplémentaires.
    Toutes mes pages JSP commencent par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <jsp:root version="1.2" xmlns:ajaxTags="http://java.sun.com/blueprints/ajaxtextfield" 
    xmlns:bp="http://java.sun.com/blueprints/ui/14"
        xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ui="http://www.sun.com/web/ui">
        <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
    et voici ce que me répond le serveur mysql au niveau de l'encodage :
    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
    mysql> \s
    --------------
    /opt/mysql/bin/mysql  Ver 14.12 Distrib 5.0.21, for pc-linux-gnu (i686) using readline 5.0
     
    Connection id:          49
    Current database:
    Current user:           root@localhost
    SSL:                    Not in use
    Current pager:          stdout
    Using outfile:          ''
    Using delimiter:        ;
    Server version:         5.0.21-standard-log
    Protocol version:       10
    Connection:             Localhost via UNIX socket
    Server characterset:    utf8
    Db     characterset:    utf8
    Client characterset:    latin1
    Conn.  characterset:    latin1
    UNIX socket:            /tmp/mysql.sock
    Uptime:                 2 hours 26 min 58 sec
     
    Threads: 1  Questions: 12608  Slow queries: 0  Opens: 0  Flush tables: 1  
    Open tables: 40  Queries per second avg: 1.430
    --------------
    et si je me positionne sur une base, voici ce qu'il me retourne :
    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
    mysql> \s
    --------------
    /opt/mysql/bin/mysql  Ver 14.12 Distrib 5.0.21, for pc-linux-gnu (i686) using readline 5.0
     
    Connection id:          50
    Current database:       emos_devel
    Current user:           root@localhost
    SSL:                    Not in use
    Current pager:          stdout
    Using outfile:          ''
    Using delimiter:        ;
    Server version:         5.0.21-standard-log
    Protocol version:       10
    Connection:             Localhost via UNIX socket
    Server characterset:    utf8
    Db     characterset:    latin1
    Client characterset:    latin1
    Conn.  characterset:    latin1
    UNIX socket:            /tmp/mysql.sock
    Uptime:                 2 hours 32 min 58 sec
     
    Threads: 1  Questions: 12620  Slow queries: 0  Opens: 0  Flush tables: 1 
     Open tables: 40  Queries per second avg: 1.375
    --------------
    Et enfin, voilà ce que me donne un SHOW CREATE TABLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    mysql> SHOW CREATE TABLE sector;
    +--------+---------------------+
    | Table  | Create Table                                               
    +--------+---------------------+
    | sector | CREATE TABLE `sector` (
      `SEQ` int(11) NOT NULL auto_increment,
      `ID` varchar(50) character set latin1 NOT NULL default '',
      `DESCRIPTION1` varchar(250) character set latin1 default NULL,
      `DESCRIPTION2` varchar(250) character set latin1 default NULL,
      PRIMARY KEY  (`SEQ`),
      UNIQUE KEY `ID` (`ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +--------+---------------------+
    1 row in set (0.01 sec)
    J'ai bien l'impression que c'est un pb de charset sur les colonnes, mais je sais pas quoi faire.

    Avez-vous des idées ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    En effet changer le charset de certaines colonnes pourrait être une solution.

    Avec un ALTER TABLE machin MODIFY lacolonne character set utf8 ça devrait le faire.

    PS : merci d'éviter les portions de code de 3 km de long

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 84
    Points
    84
    Par défaut
    Tout d'abord, merci de votre réponse.

    Je me suis positionné sur la base en question, et j'ai effectué la requête suivante :
    mysql> ALTER TABLE sector MODIFY description2 CHARACTER SET utf8;

    Mais mysql me renvoie une drôle d'erreur (enfin drôle, je me comprend...) :
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET utf8' at line 1

    Je ne vois pas où est le problème, ma table sector existe et le champs description2 aussi ...

    PS: désolé pour le code, je pensais que la solution pouvait se trouver dans un recoupement de ces informations

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 43
    Points : 43
    Points
    43
    Par défaut
    Ton problème ne viendrait-il pas, en plus du charset utilisé dans ta base de donnée, du faite que les informations aient été rentrées avec un encodding différent? En utilisant phpMyAdmin par example, ou bien avec un formulaire qui ne serait pas en UTF-8.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 84
    Points
    84
    Par défaut
    Et bien en fait, j'ai utilisé mysqldump pour exporter une base que j'ai en local (par contre je me rappelle plus la ligne de commande ).
    Je me suis ensuite connecté à mon serveur distant, puis à mysql, et j'ai lancé :
    mysql>\. mon_fichier.sql

    Comme je n'avais pas de problème de caractères en local, je me suis dit que je n'en aurait pas sur ma base distante en agissant de la sorte ... Apparament je me suis bien trompé !
    J'ai sûrement dû oublier une étape importante, masi comme je ne fais pas ce genre de manipulation d'habitude, je ne vois pas vraiment où j'ai pu me planter.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 43
    Points : 43
    Points
    43
    Par défaut
    Juste pour mémoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqldump -ulogin -p base_name > file_name.sql
    Sinon, j'ai eu pleins de problèmes d'encoding avec mysql, et j'en ai toujours d'ailleur, mais jamais avec mysqldump.

    Je ne peux pas t'aider plus désolé.

  7. #7
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    J'avais oublié qu'il fallait remettre le type de la colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE sector MODIFY description2 VARCHAR(250) CHARACTER SET utf8;
    Tu peux te connecter à la base distante avec un client MySQL classique pour voir si le problème de caractères se présente aussi ?

  8. #8
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 84
    Points
    84
    Par défaut
    Merci de vos réponses aussi rapides, elles m'ont bien mis sur la voie.

    Bon, je me suis rendu compte de ma bêtise.
    En fait, ma base en local utilise le charset latin1. Et apparament, si je l'exporte sans option particulière avec mysqldump, il utilise l'encodage par défaut (celui de l'OS), à savoir utf8.
    Je l'ai exporté avec l'encodage latin1 et importé normalement dans ma base distante, et là miracle ... tout mes caractères apparaissent correctement !

    Maintenant je me pose une autre question : est-ce que je peux laisser le charset tel quel, ou bien est-il plus intéressant d'utiliser utf8?

    Mes recherches sur le net m'amènent en tout cas à la conclusion que la conversion des données d'une base de latin1 à utf8 est très pénible...

    Je continue mes recherches, mais si vous avez une idée sur la question, je suis preneur

    Nico

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

Discussions similaires

  1. Problème d'encodage JSP/Servlet/MySQL
    Par AlexLEDE dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/05/2009, 15h13
  2. Problème d'encodage JBoss/MySQL/Jsp
    Par Beewiz dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 11/06/2007, 14h57
  3. [MySQL] Problème d'encodage / transfert de base de données
    Par Theberge43 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/01/2007, 18h21
  4. [PHP/MySQL] Problème d'encodage
    Par ymoreau dans le forum Outils
    Réponses: 13
    Dernier message: 11/01/2007, 12h08
  5. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53

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