MySQL/PHP Double-encoding

Ce produit lorsqu'on envoie des caractères "UTF-8" à l'aide d'une connexion mysql latin1. La base de données encode les caractères UTF-8 en latin1.

Pour des textes courts, on peut utiliser l'outil: UTF-8 double-encodage. Cependant, l'outil est limité à un petit nombre de caractères.

Pour les base de données, on peut utiliser une astuce décrite sur stackoverflow.

// 1. faire un "dump" en latin1, sans utilisé l'encodage UTF-8 normalement utilisé
mysqldump -u USERNAME -p BASEDEDONNEE --skip-set-charset --default-character-set=latin1 > dump.sql

// 2. creer une seconde base de données, avec les usagers/mot de passe ici

// 3. réinjecter les données en UTF-8
mysql -u USERNAME -p --default-character-set=utf8 BASEDEDONNEE2 < /tmp/dump.sql

// 4. corriger sa connexion MYSQL / PDO

Envoyer l'encodage en PHP

Avec l'objet PDO: new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'))

Avec mysql_connect: mysql_set_charset('utf8', $db);