Os pontos de interrogação vêm disso:
- O cliente tem um caractere válido (bom) e
- Os
SET NAMESconcorda com a codificação que o cliente tem (bom), mas - O
CHARACTER SETda coluna de destino não inclui o caractere pretendido (ruim).
Exemplos:
latin1lida apenas com caracteres da Europa Ocidental; tentar colocar um caractere do Leste Europeu ou qualquer caractere asiático nele não vai caber.latin2ecp1250pode lidar com o tcheco, então as conversões entre eles são geralmente boas, mas não entre nenhum deles elatin1utf8mb4é 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
utf8mb4na(s) coluna(s) da tabela provavelmente funciona em todos os casos. - Caso contrário, escolha algum
CHARACTER SETpara 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.