O que aconteceu:
- você tinha dados codificados em utf8 (bom)
SET NAMES latin1estava 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 árabes (curdo/farsi/etc), então pontos de interrogação os substituíram. A cura (para futuras
INSERTs ):- dados codificados em utf8 (bom)
mysqli_set_charset('utf8')(ou o que seu cliente precisa para estabelecer oCHARACTER SET)- 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. Para verificar se os dados estão armazenados corretamente, faça
SELECT col, HEX(col)... .هرچوون deve voltar D987E2808CD8B1DA86D988D988D986 Caracteres árabes em utf8 têm hexadecimal de D8xx ou D9xx.
(
utf8mb4 funciona tão bem quanto utf8; ou funciona para o árabe.) Más notícias:Os dados que foram inseridos e transformados em '???' não pode ser recuperado.