Page 1 sur 3

Changements de caractères lors d'une exportation

Posté : 15 sept. 2005, 14:43
par niconaldo
Bonjour à tous,

J'ai une question que je me pose depuis un moment déjà :

Pourquoi, lors d'une exportation d'une base de données MySQL, certains caractères comme les accents se transforment en caractères incompréhensibles (exemple : ç en ç, é en é...) ?

Je me demande s'il existe un moyen pour éviter cela (changer le jeu de caractères peut-être?).

Merci d'avance à ceux qui auraient une idée sur le sujet.

Posté : 15 sept. 2005, 15:17
par Cyrano
L'exportation se fait en utf-8 alors qu'il faudrait le faire en iso-8859-1 parce que les données sont probablement enregistrées en iso-8859-1.

Posté : 15 sept. 2005, 15:50
par niconaldo
Merci pour ta réponse, par contre je ne sais pas comment contrôler le format de l'exportation sur l'accueil de phpMyAdmin j'ai :
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
Interclassement pour la connection MySQL : utf8_general_ci
Mais sur la page qui liste les tables de la BDD, dans la colonne "Interclassement" j'ai : latin1_swedish_ci.
Est-ce qu'il s'agit du jeu de caractères ? Si oui je ne sais pas pourquoi c'est celui-ci qui est affecté aux tables, ni comment le modifier.

Merci de m'en dire plus si tu comprends mon charabia ;)

Posté : 15 sept. 2005, 16:08
par Cyrano
Dans le répertoire phpMyAdmin, édite le fichier config.inc.php et vérifie la valeur de $cfg['AllowAnywhereRecoding'] = TRUE; Si c'est FALSE, change pour TRUE, enregistre et refais un essai.

Posté : 15 sept. 2005, 16:16
par niconaldo
Merci du conseil, mais ca marche pas...

J'obtiens l'erreur suivante :
Erreur lors du chargement de l'extension iconv ou recode, utilisée pour convertir le jeu de caractères; veuillez activer l'une de ces extensions dans PHP, ou désactiver la conversion des jeux de caractères dans phpMyAdmin
Peux-tu me dire s'il est normal ou pas que l'interclassement soit "latin1_swedish_ci" ? (cf message précédent)

Merci encore de ton aide.

Posté : 15 sept. 2005, 16:23
par Cyrano
latin1_swedish_ci correspond à iso-8859-1 donc c'est normal, MySQL prend ses origines en Suède et c'est donc la configuration par défaut.

Bon, remets donc le truc indiqué à FALSE, je vais essayer de retrouver le message qui en parlait, ce sujet a déjà été traité et je me suis longtemps arraché les cheveux avec ce problème. Je reviens avec une réponse.

Posté : 15 sept. 2005, 16:35
par Cyrano
Bon, je vois pas ce que ça peut être d'autre, je te mets ici un extrait de ma propre configuration et ça fonctionne très bien:
/**
 * Language and charset conversion settings
 */
// Default language to use, if not browser-defined or user-defined
$cfg['DefaultLang'] = 'fr-iso-8859-1';

// Force: always use this language - must be defined in
//        libraries/select_lang.lib.php
// $cfg['Lang']     = 'en-iso-8859-1';

// Default charset to use for recoding of MySQL queries, does not take
// any effect when charsets recoding is switched off by
// $cfg['AllowAnywhereRecoding'] or in language file
// (see $cfg['AvailableCharsets'] to possible choices, you can add your own)
$cfg['DefaultCharset'] = 'iso-8859-1';

// Allow charset recoding of MySQL queries, must be also enabled in language
// file to make harder using other language files than unicode.
// Default value is FALSE to avoid problems on servers without the iconv
// extension and where dl() is not supported
$cfg['AllowAnywhereRecoding'] = TRUE;

// You can select here which functions will be used for charset conversion.
// Possible values are:
//      auto   - automatically use available one (first is tested iconv, then
//               recode)
//      iconv  - use iconv or libiconv functions
//      recode - use recode_string function
$cfg['RecodingEngine'] = 'auto';

Posté : 15 sept. 2005, 17:11
par niconaldo
Merci pour ta ténacité,

J'ai la même config à part ce fameux $cfg['AllowAnywhereRecoding'] réglé à FALSE chez moi.

Peut-être une piste, sur un autre forum on me répond que ces caractères bizarres sont les codes des caractères spéciaux (à, ê, é, ç...) et qu'ils sont interprétés par le navigateur.

Donc quand on les exporte dans un autre "contexte" comme un fichier Excel ou un fichier texte pour faire une sauvegarde, on obtient les caractères bizarres et pas leur équivalent.

Enfin c'est ce que j'en ai compris... Qu'en penses-tu ?

Posté : 15 sept. 2005, 17:35
par Cyrano
Ce que tu vois, ce sont effectivement des caractères spéciaux codés en iso-8859-1 exportés en utf-8 : ça fout la zone et tu n'es ni le premier ni le dernier à avoir ce problème.

Il y a un paramètre à ajuster dans le fichier de configuration de phpMyAdmin pour faire afficher dans le formulaire d'exportation une liste déroulante en plus permettant de choisir le jeu de carctères d'exportation. Sinon par défaut pma exporte en utf-8.

Je n'ai pas retouvé le message sur le forum, mais la réponse a déjà été donnée j'en suis absolument certain, je m'en suis moi-même servi.

Posté : 15 sept. 2005, 17:42
par Cyrano
Je l'ai trouvé et c'est en fait la même réponse que ce que je t'ai donné

Posté : 15 sept. 2005, 18:00
par niconaldo
Merci encore pour le temps passé sur mon problème, je te crois pour la solution que tu donnes (encore heureux) mais saurais-tu pourquoi ca ne marche pas pour moi ?

Posté : 15 sept. 2005, 19:16
par Cyrano
C'est quoi ta configuration d'environnement de développement ?

Posté : 16 sept. 2005, 14:14
par niconaldo
Salut,

Désolé de ne pas avoir répondu plus tôt, panne d'Internet ce matin...

Pour ce qui est de l'environnement de développement, tu risques de pas aimer... L'application est sur un serveur Windows Server 2003.

La version de MySQL est la 4.1.10.

Toutefois je précise que dans le cadre d'un autre site Internet avec hébergement Linux j'ai déjà rencontré le même problème à propos des caractères bizarres.

Si tu y comprends quelque chose explique moi parce que là je sèche.

Posté : 16 sept. 2005, 15:34
par Cyrano
Ma propre configuration n'est pas tellement différente, Win XP Pro SP2 et MySQL 4.1.13 avec PHP 5.0.3 et phpMyAdmin 2.6.2

Posté : 16 sept. 2005, 16:02
par niconaldo
Que penses-tu du message d'erreur qui s'affiche quand je passe $cfg['AllowAnywhereRecoding'] à TRUE dans config.inc.php :
Erreur lors du chargement de l'extension iconv ou recode, utilisée pour convertir le jeu de caractères; veuillez activer l'une de ces extensions dans PHP, ou désactiver la conversion des jeux de caractères dans phpMyAdmin
Est-ce que tu comprends comment je pourrais "activer l'une de ces extensions" ?