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
2- Je convertit le fichier dumplatin.sql en utf8 avec Notifier et je le renomme dumputf8.sql
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
3- Je supprime ma base et j'en crée une nouvelle en UTF8
4 - J'importe dumputf8.sql dans ma base avec
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;"
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 mysql --user=root --max_allowed_packet=16M -p --default-character-set=utf8 dbname <dumputf8.sql
Quel est l'erreur dans cette méthode ?
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
Que signifie et d'où ça vient ?
- Je suis ensuite tombé sur http://antoun.developpez.com/mysql5/...Collations.pdf. que j'ai étudié en détail.
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%' ;
SHOW VARIABLES LIKE 'colla%'
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'
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.
Je ne sais plus quoi faire à présent alors je me tourne vers vous
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>![]()
Partager