Tekencodering is, net als tijdzones, een constante bron van problemen.
Wat u kunt doen, is zoeken naar "high-ASCII"-tekens, aangezien dit ofwel LATIN1-tekens of symbolen met accenten zijn, of de eerste van een UTF-8 multi-byte-teken. Het verschil vertellen zal niet gemakkelijk zijn, tenzij je een beetje vals speelt.
Om erachter te komen welke codering correct is, moet je gewoon SELECT
twee verschillende versies en vergelijk visueel. Hier is een voorbeeld:
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'), ']')
Dit wordt ongewoon ingewikkeld gemaakt omdat de MySQL regexp-engine dingen als \x80
lijkt te negeren en maakt het nodig om de UNHEX()
. te gebruiken methode in plaats daarvan.
Dit levert de volgende resultaten op:
latin1 utf8
----------------------------------------
Björn Björn