sql >> Base de Datos >  >> RDS >> Mysql

Caracteres no ingleses almacenados, obtuvo '??????' - Problema con el conjunto de caracteres de MySQL

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 .