Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Caracteres não ingleses armazenados, obtive '?????' - Problema do conjunto de caracteres MySQL


Más notícias. Mas primeiro, verifique novamente:
SELECT col, HEX(col)...

para ver o que está na tabela. Se o hexadecimal mostrar 3F , os dados desaparecem. Armazenado corretamente, o dal o caractere deve ser hexadecimal D8AF; hah é hex D8AD .

O que aconteceu:
  • você tinha dados codificados em utf8 (bom)
  • SET NAMES latin1 estava em vigor (padrão, mas errado)
  • a coluna foi declarada CHARACTER SET latin1 (padrão, mas errado)

Conforme você INSERTed os dados, eles foram convertidos para latin1, que não possui valores para caracteres farsi, então os pontos de interrogação os substituíram.

A cura (para futuros `INSERTs):
  • Recodifique seu aplicativo usando a interface mysqli_* em vez da interface mysql_* obsoleta.
  • dados codificados em utf8 (bom)
  • mysqli_set_charset('utf8')
  • verifique se as colunas e/ou tabelas padrão são CHARACTER SET utf8
  • Se você estiver exibindo em uma página da Web, <meta...utf8> deve estar próximo ao topo.

A discussão acima é sobre CHARACTER SET , a codificação de caracteres. Agora, uma dica sobre COLLATION , que é usado para comparar e classificar.

Se você quiser que eles sejam tratados da mesma forma:'بِسْمِ' ='بسم', use utf8_unicode_ci (em vez de utf8_general_ci) para o COLLATION .