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

Como detectar caracteres UTF-8 em uma coluna codificada em Latin1 - MySQL


A codificação de caracteres, como os fusos horários, é uma fonte constante de problemas.

O que você pode fazer é procurar por quaisquer caracteres "high-ASCII", pois esses são caracteres ou símbolos acentuados LATIN1 ou o primeiro de um caractere multibyte UTF-8. Dizer a diferença não será fácil a menos que você trapaceie um pouco.

Para descobrir qual codificação está correta, basta SELECT duas versões diferentes e comparar visualmente. Aqui está um exemplo:
SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, 
       CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 
FROM users 
WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')

Isso se torna incomumente complicado porque o mecanismo regexp do MySQL parece ignorar coisas como \x80 e torna necessário usar o UNHEX() método em vez disso.

Isso produz resultados como este:
latin1                utf8
----------------------------------------
Björn                Björn