Os pontos de interrogação vêm disso:
- O cliente tem um caractere válido (bom) e
- Os
SET NAMES
concorda com a codificação que o cliente tem (bom), mas - O
CHARACTER SET
da coluna de destino não inclui o caractere pretendido (ruim).
Exemplos:
latin1
lida apenas com caracteres da Europa Ocidental; tentar colocar um caractere do Leste Europeu ou qualquer caractere asiático nele não vai caber.latin2
ecp1250
pode lidar com o tcheco, então as conversões entre eles são geralmente boas, mas não entre nenhum deles elatin1
utf8mb4
é um superconjunto deutf8
.Colocar um caractere utf8 em utf8mb4 está ok, mas o inverso resultará em um '?' em alguns casos.
Os caracteres que foram convertidos para '?' não pode ser recuperado da tabela.
Como corrigir futuros
INSERTs
? - Usando
utf8mb4
na(s) coluna(s) da tabela provavelmente funciona em todos os casos. - Caso contrário, escolha algum
CHARACTER SET
para as colunas da tabela que correspondem razoavelmente aos dados do cliente.
O motivo de apenas alguns dos caracteres serem
?
(em š?ž??
) é porque šž
existem em latin1 mas os outros não. Resumindo:Altere o
CHARACTER SET
na definição da tabela.