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 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 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
.