|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 24 ![]() |
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
Code :
mysqldump -h localhost --user=root -p --default-character-set=latin1 -c dbname --insert-ignore --skip-set-charset > dumplatin.sql
3- Je supprime ma base et j'en crée une nouvelle en UTF8 Code :
mysql --user=root -p --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
Code :
mysql --user=root --max_allowed_packet=16M -p --default-character-set=utf8 dbname <dumputf8.sql
Code :
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 :
Code :
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 :
|
||||||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
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 ? |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 24 ![]() |
Oui je peux repartir de MSSQL
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Dans ce cas, la méthode est la suivante :
C'est tout. MySQL recevra les données latin1 et les convertira automatiquement en utf8. |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 24 ![]() |
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 |
|
|
00
|
|
|
#6 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 24 ![]() |
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 :
Code :
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 |
||||
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
euh... aucune solution. Peut-être devrais-tu voir du côté du forum Windows ?
|
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 24 ![]() |
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 ? |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com