Récupération des caractères Latin1 dans les tables UTF8 : une solution
Comme vous l'avez mentionné, définir le jeu de caractères entre PHP et MySQL garantit de nouvelles insertions sont correctement stockés. Cependant, récupérer d'anciennes données avec des signes diacritiques qui étaient auparavant stockées en tant que Latin1 et corrompues plus tard peut s'avérer difficile.
Pour résoudre ce problème, vous pouvez utiliser la fonction de conversion MySQL :
convert(cast(convert(name using latin1) as binary) using utf8)
Par défaut , cette fonction peut réparer la plupart des données corrompues sans aucune autre modification. Cependant, vous devrez peut-être ajuster la conversion interne en fonction de la façon dont les données ont été modifiées lors de la conversion d'encodage initiale.
Considérez l'exemple suivant :
$result = mysql_iquery('SELECT * FROM `table`'); while ($row = mysql_fetch_assoc($result)) { $message = $row['name']; $message = convert(cast(convert($message using latin1) as binary) using utf8); mysql_iquery('UPDATE `table` SET `name`="'.mysql_real_escape_string($message).'" WHERE `a1`="'.$row['a1'].'"'); }
En utilisant cette fonction, vous devez pouvoir récupérer les signes diacritiques corrompus et mettre à jour correctement les lignes concernées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!