Mysql
 sql >> Base de données >  >> RDS >> Mysql

codage de caractères étrange des données stockées, l'ancien script les montre bien, le nouveau ne le fait pas

Bref, parce que ça a déjà été discuté mille fois :

  1. PHP contient une chaîne, dites "漢字" , codé en UTF-8. Les octets pour cela sont E6 BC A2 E5 AD 97 .
  2. Il envoie cette chaîne via une connexion de base de données définie sur latin1 .
  3. La base de données reçoit les octets E6 BC A2 E5 AD 97 , pensant que ceux-ci représentent latin1 caractères.
  4. La base de données stocke les caractères æ¼¢å­ (les caractères qui E6 BC A2 E5 AD 97 correspond à en latin1 ).
  5. Le même processus inversé fait que PHP reçoit les mêmes octets, qu'il traite ensuite comme UTF-8. L'aller-retour fonctionne bien pour PHP, même si la base de données ne traite pas les caractères comme il se doit.

Le problème ici était donc que la connexion à la base de données n'était pas correctement définie lorsque les données ont été entrées dans la base de données. Vous devrez convertir les données de la base de données en caractères corrects. Essayez ceci :

SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name

Peut-être utf8 n'est pas ce dont vous avez besoin ici, expérimentez. Si cela fonctionne, changez ceci en un UPDATE déclaration pour mettre à jour les données de façon permanente.