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

Outils MySQL Discussion :

pb encodage utf8


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Par défaut pb encodage utf8
    Bonjour,

    Je relance ce sujet (http://www.developpez.net/forums/sho...d.php?t=472947) car je rencontre un problème identique.
    ça va être un peu long mais je vais détailler ce qui m'arrive

    Je travaille à créer une nouvelle version d'un site pour le passer de ISS/SQL server à IIS/mysql le tout sur du windows 2000 server .

    Le site comporte aussi des documents stockés dans la base et de nombreux articles sous forme de fichiers asp écrit en dur sur le disque.
    Ces fichiers et les données de la bases sont encodés en iso latin.

    J'ai crée une 1er version du nouveau site dont l'encodage est latin1 dans mysql et cela fonctionne globalement mise à part le fait que je n'arrive à valider w3c en xhtml strict.

    Après réflexion j'ai donc décidé d'encoder la nouvelle version du site en utf-8.

    J'ai changé les paramètres de l'en-tete http dans iss pour le passer en utf8.
    J'ai vérifié avec http://web-sniffer.net le serveur renvoi un content type égal à "text/html; charset=utf-8"

    J'ai aussi inséré
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> dans le head des mes pages.

    Pour encoder en utf8 les fichiers écrit dur en j'ai trouvé un petit logiciel du nom d'"unifier" qui fait très bien le job à l'image de ce que fait iconv en unix. Pas de problèmes particulier les accents sont bien rendu.

    Reste plus qu'à afficher correctement le contenu stocké en base de données et je n'y arrive pas.

    J
    • J'ai d'abord essayé cette méthode

    1 - Je dump ma base en latin avec cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqldump -h localhost --user=root -p --default-character-set=latin1 -c dbname --insert-ignore --skip-set-charset > dumplatin.sql
    2- Je convertit le fichier dumplatin.sql en utf8 avec Notifier et je le renomme dumputf8.sql

    3- Je supprime ma base et j'en crée une nouvelle en UTF8

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql --user=root -p --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
    4 - J'importe dumputf8.sql dans ma base avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql --user=root --max_allowed_packet=16M -p --default-character-set=utf8 dbname <dumputf8.sql
    J'obtiens toujours une erreur sur la 1er ligne de mon fichier dumputf8.sql et ce quelque soit la 1er ligne de ce fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error Code: 1064 - 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 '
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */' at line 1
    Quel est l'erreur dans cette méthode ?
    Que signifie  et d'où ça vient ?



    J'ai essayé les requetes du type "ALTER TABLE Lecteurs
    MODIFY Ville VARCHAR(255) CHARSET utf8 ;" ou avec des "CONVERT(Ville USING utf8)" résultats : aucun changement dans le rendu des accents.

    J'ai donné dans le set names = utf8 et j'ai passé tous les paramètres par defaut du serveur en UTF8.


    Voici le résultat de la commande SHOW VARIABLES LIKE 'char%' ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'character_set_client', 'utf8'
    'character_set_connection', 'utf8'
    'character_set_database', 'utf8'
    'character_set_results', 'utf8'
    'character_set_server', 'utf8'
    'character_set_system', 'utf8'
    SHOW VARIABLES LIKE 'colla%'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'collation_connection', 'utf8_general_ci'
    'collation_database', 'utf8_general_ci'
    'collation_server', 'utf8_general_ci'

    J'ai même créé des tables et des bases vierges en utf8 et j'y ai inséré des données de test mais rien n'y fais les caractères spéciaux issus de mysql sont mal affichés si je les encode en utf8.

    J'ai oublié de préciser que la page qui execute le code et qui lit les données est aussi encodée en UTF-8.

    Je vous livre aussi un exemple tout bête de code qui ne fonctionne pas quand TOUT est utf8.
    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
    <select>
    <%sql5="SET NAMES utf8"
    conn.execute SQL5
    SQL6="SELECT * from departement order by id asc"
    Set RS6 = server.createobject("ADODB.Recordset")	
    RS6.Open sql6,Conn
    Rs6.MoveFirst
    Do While Not Rs6.EOF
    id=RS6("id")
    dep=RS6("departement")
    val=id
    %>
    <option value="<%=id%>"><%=val&"-"&dep%></option>
    <%
       RS6.MOVENEXT
    Loop%>
    </select>
    Je ne sais plus quoi faire à présent alors je me tourne vers vous

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    La gestion des jeux de caractères sous MySQL est bcp plus simple que ce que tu penses, mais totalement contre-intuitive (ce qui explique que tout le monde tombe dans le panneau).
    Peux-tu repartir de ton export SQL Server ou pas ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Par défaut
    Oui je peux repartir de MSSQL

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Dans ce cas, la méthode est la suivante :

    1. A partir de SQL Server, tu génères ton fichier (ou tes fichiers) de données avec l'encodage le plus pratique pour toi (imaginons que ce soit latin1, càd ISO-8859-1 ou ISO-8859-15)
    2. Dans MySQL, tu crées tes tables vides avec les colonnes texte en utf8
    3. Tu charges les données en indiquant le jeu de caractères du fichier (latin1 dans cet exemple)


    C'est tout. MySQL recevra les données latin1 et les convertira automatiquement en utf8.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Par défaut
    Ok ça marche en faisant un export sql depuis sqlserver réimporté depuis mysql.

    Cela dit je n'obtiens pas de bon résultats si je fais un select sur mssql et un insert dans mysql à travers une page asp. C'est le driver odbc de mysql qui est en cause
    IT'S A BUG NOT A FEATURE


    MyODBC 3.51.x doesn’t support Unicode characters. So we just
    have to wait for MyODBC 5.0 Production.



    http://bugs.mysql.com/bug.php?id=3348


    Merci ANTOUN

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Par défaut
    Je pensais mon problème résolu et je constate que ce n'est plus tout à fait le cas. Je viens donc d'enlever le flag "RESOLU" à ce sujet

    Mon problème d'encodage est bien résolu sur mon serveur de développement (windows2000) mais pas sur mon serveur de prod (w2003 server)

    J'ai migré les bases de données correctement de w2000 à w2003 par une copie des tables depuis sqlyog. Mes tables sont bien encodées en UTf-8 sur le serveur w2003

    J'ai installé le même driver ODBC 3.51.23 sur les 2 serveurs

    J'ai specifié sur IIS6 de w2003 l'en tete http suivant : content-type : text/html;charset=utf-8.

    J'ai vérifié avec web-sniffer que cet en-tete http étais bien pris en compte

    J'affiche correctement les donnée sur w2003 serveur depuis mysql query administrator.

    Depuis mes pages asp sur le serveur w2003 les caractères accentués stockées dans la base ne s'affiche pas correctement.

    J'ai aussi changé le DSN sur mon serveur de dev windows 2000 pour qu'il interroge la base de mon serveur de prod w2003.
    Mes pages asp sur mon serveur w2000 affiche correctement les caractères accentués stockés dans la base de mon serveur w2003!!!!!

    La seule différence entre mes pages ASP de mon serveur w2000 et w2003 réside dans le fait que pour le moment j'ai du faire une connexion sans DSN.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set CN = Server.CreateObject("ADODB.Connection")
    cst = "Driver={MySQL ODBC 3.51 Driver};" & _ 
            "Server=localhost;" & _ 
            "Database=dbname;" & _ 
            "Uid=root;" & _ 
            "Pwd=password;" 
    CN.open cst
    CN.execute "set names utf8"
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set CN = Server.CreateObject("ADODB.Connection")
    CN.Open "dsnname"
    CN.execute "set names utf8"
    en effet j'obtiens l'erreur suivante en utilisant la connexion DSN
    Microsoft OLE DB Provider for ODBC Drivers error '80004005'
    [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

    Je précise que si je teste le même DSN depuis la console "ODBC driver source administrator" il fonctionne parfaitement.

    Je peux très bien me passer de connexion avec DSN sauf si ça implique de ne pas afficher correctement les caractères accentués.

    Auriez vous des pistes à me proposer pour résoudre mon problème ?

    Merci d'avance

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    euh... aucune solution. Peut-être devrais-tu voir du côté du forum Windows ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Par défaut
    pour info j'ai résolu mon pb de DSN en supprimant le USER DSN et en créant un SYSTEM DSN.

    Le pb d'encodage des données utf8 est inchangé sur w2003.


    J'ai installé sur w2003 le driver odbc 5.1 de mysql (version béta) et, crée un system DSN avec ce nouveau driver et miracle je n'ai plus de problème d'encodage.

    le hic c'est que mysql recommande de ne pas installer ce driver sur un serveur de prod !

    existe il d'autres drivers odbc pour mysql/windows 32 bits ?

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

Discussions similaires

  1. [Encodage] utf8 image affichage
    Par oim dans le forum Langage
    Réponses: 7
    Dernier message: 05/04/2007, 14h24
  2. Pb encodage utf8
    Par rems14 dans le forum Outils
    Réponses: 1
    Dernier message: 18/02/2007, 19h47
  3. [Tableaux] Encodage utf8 d'un tableau
    Par lodan dans le forum Langage
    Réponses: 8
    Dernier message: 28/08/2006, 13h57
  4. Problème d'encodage UTF8
    Par vg33 dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2006, 19h28
  5. fonction native d'encodage utf8 ?
    Par Bruno2000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2006, 17h27

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