Malas noticias. Pero primero, verifique dos veces:
SELECT col, HEX(col)...
para ver lo que hay en la tabla. Si el hexadecimal muestra 3F , entonces los datos se han ido. Almacenado correctamente, el dal el carácter debe ser hexadecimal D8AF; hah es hexadecimal D8AD .
Qué pasó:
- tenías datos codificados en utf8 (bueno)
SET NAMES latin1estaba 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 farsi, por lo que los signos de interrogación los reemplazaron.
La cura (para futuros `INSERTOS):
- Recodifique su aplicación utilizando la interfaz mysqli_* en lugar de la interfaz obsoleta mysql_*.
- datos codificados en utf8 (bueno)
- mysqli_set_charset('utf8')
- 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.
Si desea que se traten de la misma manera:'بِسْمِ' ='بسم', utilice utf8_unicode_ci (en lugar de utf8_general_ci) para COLLATION .