Changements de caractères lors d'une exportation

niconaldo
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 14:43

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.

Mammouth du PHP | 19672 Messages

15 sept. 2005, 15:17

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

niconaldo
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 15:50

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 ;)

Mammouth du PHP | 19672 Messages

15 sept. 2005, 16:08

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

niconaldo
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 16:16

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.

Mammouth du PHP | 19672 Messages

15 sept. 2005, 16:23

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

15 sept. 2005, 16:35

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';
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

niconaldo
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 17:11

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 ?

Mammouth du PHP | 19672 Messages

15 sept. 2005, 17:35

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

15 sept. 2005, 17:42

Je l'ai trouvé et c'est en fait la même réponse que ce que je t'ai donné
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

niconaldo
Invité n'ayant pas de compte PHPfrance

15 sept. 2005, 18:00

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 ?

Mammouth du PHP | 19672 Messages

15 sept. 2005, 19:16

C'est quoi ta configuration d'environnement de développement ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

niconaldo
Invité n'ayant pas de compte PHPfrance

16 sept. 2005, 14:14

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.

Mammouth du PHP | 19672 Messages

16 sept. 2005, 15:34

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

niconaldo
Invité n'ayant pas de compte PHPfrance

16 sept. 2005, 16:02

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" ?