Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erkennen Sie UTF-8-Zeichen in einer mit Latin1 codierten Spalte – MySQL

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