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

Caractères non anglais stockés, obtenu '?????' - Problème de jeu de caractères MySQL

Mauvaises nouvelles. Mais d'abord, vérifiez :

SELECT col, HEX(col)...

pour voir ce qu'il y a dans le tableau. Si l'hexagone affiche 3F , les données ont disparu. Correctement stocké, le dal le caractère doit être hexadécimal D8AF; hah est hexadécimal D8AD .

Que s'est-il passé :

  • vous aviez des données encodées en utf8 (bien)
  • SET NAMES latin1 était en vigueur (par défaut, mais erroné)
  • la colonne a été déclarée CHARACTER SET latin1 (par défaut, mais faux)

Comme vous l'avez INSERTed les données, elles ont été converties en latin1, qui n'a pas de valeurs pour les caractères farsi, donc les points d'interrogation les ont remplacés.

Le remède (pour les futurs `INSERTs) :

  • Recoder votre application en utilisant l'interface mysqli_* au lieu de l'interface obsolète mysql_*.
  • Données encodées en utf8 (bonnes)
  • mysqli_set_charset('utf8')
  • vérifier que la ou les colonnes et/ou la table par défaut sont CHARACTER SET utf8
  • Si vous affichez sur une page Web, <meta...utf8> devrait être près du sommet.

La discussion ci-dessus concerne CHARACTER SET , l'encodage des caractères. Maintenant, un conseil sur COLLATION , qui est utilisé pour comparer et trier.

Si vous voulez que ceux-ci soient traités de la même manière :'بِسْمِ' ='بسم', utilisez alors utf8_unicode_ci (au lieu de utf8_general_ci) pour le COLLATION .