Question

Hier, j'ai écouté ce problème pendant quelques heures:

J'ai une base de données sur un serveur MySQL 4.1.22 avec un codage défini sur & "UTF-8 Unicode (utf8) &"; (tel que rapporté par phpMyAdmin). Les jeux de caractères par défaut des tables de cette base de données sont latin2 . Mais l’application Web (CMS Made Simple écrit en PHP) qui l’utilise affiche les pages dans utf8 ...

Si foutu que cela soit, cela fonctionne réellement. L'application Web affiche correctement les caractères (principalement le tchèque et le polonais).

Je lance: & "mysqldump -u xxx -p -h yyy nom_base > dump.sql " ;. Cela me donne un script SQL qui:

  • est parfait dans n'importe quel éditeur (tel que Notepad +) lors de l'affichage dans UTF-8 - tous les caractères s'affichent correctement
  • le jeu de caractères par défaut de toutes les tables du script est latin2
  • il a " / *! 40101 SET NOMS latin2 * /; " ligne au début (parmi d'autres paramètres)

Je souhaite maintenant exporter cette base de données vers un autre serveur fonctionnant sous MySQL 5.0.67, le codage du serveur étant également défini sur & "UTF-8 Unicode (utf8) &" ;. J'ai copié toute l'installation de CMS Made Simple, copié le script dump.sql et exécuté & «Mysql -h ddd -u zzz -p nom_base & Lt; dump.sql " ;. Ensuite, tous les caractères sont brouillés lors de l’affichage des pages Web de CMSMS.

J'ai essayé le réglage:
SET character_set_client = utf8;
SET character_set_connection = latin2;

Et toutes les combinaisons (juste pour être sûr, même si cela n’a aucun sens pour moi): latin2 / utf8, latin2 / latin2, utf8 / utf8, etc. - n’aident en rien. Tous les caractères sont encore embrouillés, mais parfois de manière différente:).

J'ai également essayé de remplacer tous les paramètres latin2 par utf8 dans le script (noms de jeu et jeux de caractères par défaut pour les tables). Rien.

Y at-il des experts MySQL ici qui pourraient expliquer en quelques mots (je suis sûr que c'est simple après tout) comment fonctionne tout ce processus d'encodage? Je lis 9.1.4. Jeux de caractères de connexion et classements , mais rien n’a été utile.

Merci, Matt

Était-ce utile?

La solution 2

Ugh ... ok, semble avoir trouvé une solution.

MySQL n’est pas le coupable ici. J'ai fait un simple vidage et chargement maintenant, sans modification du script dump.sql, ce qui signifie que j'ai laissé & "; Définir les noms latin2 &"; et tables charsets comme ils étaient. Ensuite, j'ai basculé mon installation CMSMS d'origine sur la nouvelle base de données et ... cela a fonctionné correctement. Le codage dans la base de données est donc correct, ou du moins cela fonctionne bien avec l'installation de CMSMS que j'avais chez mon ancien fournisseur d'hébergement (CMSMS apparemment fait des choses amusantes avec l’encodage des caractères ).

Pour que cela fonctionne avec mon nouvel hébergeur, il a fallu ajouter cette ligne à lib / adodb / drivers / adodb-mysql.inc.php dans l'installation du système de gestion de système de gestion de système:

mysql_query('set names latin2',$this->_connectionID);

Il s'agit d'une solution légèrement modifiée issue de cette publication . Vous pouvez également y trouver la ligne exacte. Cela ressemble donc à un problème de configuration du client mysql.

Autres conseils

Avez-vous essayé d'ajouter l'option --default-character-set = name, comme ceci:

mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql

J'ai déjà eu ce problème et cela a fonctionné après avoir utilisé cette option.

J'espère que ça aide!

SOLUTION pour moi:

Définissez cette option dans votre fichier php après mysql_connect (ou après mysql_select_db ) ..

mysql_query("SET NAMES 'utf8'");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top