L'encodage des caractères, comme les fuseaux horaires, est une source constante de problèmes.
Ce que vous pouvez faire est de rechercher tous les caractères "high-ASCII" car il s'agit soit de caractères ou de symboles accentués LATIN1, soit du premier d'un caractère multi-octets UTF-8. Faire la différence ne sera pas facile à moins de tricher un peu.
Pour déterminer quel encodage est correct, il vous suffit de SELECT
deux versions différentes et comparer visuellement. Voici un exemple :
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'), ']')
Ceci est rendu inhabituellement compliqué car le moteur d'expression régulière MySQL semble ignorer des choses comme \x80
et oblige à utiliser le UNHEX()
méthode à la place.
Cela produit des résultats comme celui-ci :
latin1 utf8
----------------------------------------
Björn Björn