Qué pasó:
- tenías datos codificados en utf8 (bueno)
SET NAMES latin1
estaba en vigor (predeterminado, pero incorrecto)- la columna fue declarada
CHARACTER SET latin1
(predeterminado, pero incorrecto)
Mientras INSERTed
los datos, se convirtió a latin1, que no tiene valores para los caracteres árabes (kurdo/farsi/etc), por lo que los signos de interrogación los reemplazaron.
La cura (para futuros INSERTs
) ):
- datos codificados en utf8 (bueno)
mysqli_set_charset('utf8')
(o lo que su cliente necesite para establecer elCHARACTER SET
)- verifique que la(s) columna(s) y/o la tabla por defecto sean
CHARACTER SET utf8
- Si está visualizando en una página web,
<meta...utf8>
debe estar cerca de la parte superior.
La discusión anterior es sobre CHARACTER SET
, la codificación de caracteres. Ahora un consejo sobre COLLATION
, que se utiliza para comparar y clasificar.
Para comprobar que los datos se almacenan correctamente, SELECT col, HEX(col)...
.هرچوون
debería volver D987E2808CD8B1DA86D988D988D986
Los caracteres árabes en utf8 tienen el hexadecimal D8xx o D9xx.
(utf8mb4
funciona tan bien como utf8
; cualquiera funciona para árabe.)
Malas noticias:Los datos que se insertaron y se convirtieron en '???' no se puede recuperar.