Die Zeichencodierung ist ebenso wie Zeitzonen eine ständige Quelle von Problemen.
Was Sie tun können, ist nach allen "High-ASCII"-Zeichen zu suchen, da dies entweder Zeichen oder Symbole mit LATIN1-Akzenten oder das erste eines UTF-8-Multibyte-Zeichens sind. Es wird nicht einfach sein, den Unterschied zu erkennen, es sei denn, Sie schummeln ein wenig.
Um herauszufinden, welche Codierung richtig ist, müssen Sie nur SELECT
zwei verschiedene Versionen und visuell vergleichen. Hier ist ein Beispiel:
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'), ']')
Dies wird ungewöhnlich kompliziert, weil die MySQL-Regexp-Engine anscheinend Dinge wie \x80
ignoriert und macht die Verwendung von UNHEX()
erforderlich Methode statt.
Dies erzeugt Ergebnisse wie diese:
latin1 utf8
----------------------------------------
Björn Björn