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