La codificación de caracteres, como las zonas horarias, es una fuente constante de problemas.
Lo que puede hacer es buscar cualquier carácter "ASCII alto", ya que estos son caracteres o símbolos acentuados LATIN1, o el primero de un carácter multibyte UTF-8. Saber la diferencia no será fácil a menos que hagas un poco de trampa.
Para averiguar qué codificación es correcta, simplemente SELECT
dos versiones diferentes y comparar visualmente. He aquí un ejemplo:
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'), ']')
Esto se vuelve inusualmente complicado porque el motor MySQL regexp parece ignorar cosas como \x80
y hace necesario usar el UNHEX()
en su lugar.
Esto produce resultados como este:
latin1 utf8
----------------------------------------
Björn Björn