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
.