Kódování znaků, stejně jako časová pásma, je neustálým zdrojem problémů.
Co můžete udělat, je vyhledat jakékoli znaky s vysokým ASCII, protože se jedná buď o znaky nebo symboly s diakritikou LATIN1, nebo o první z vícebajtových znaků UTF-8. Rozpoznat rozdíl nebude snadné, pokud nebudete trochu podvádět.
Chcete-li zjistit, jaké kódování je správné, stačí SELECT
dvě různé verze a vizuálně porovnat. Zde je příklad:
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'), ']')
To je neobvykle komplikované, protože se zdá, že motor regulárních výrazů MySQL ignoruje věci jako \x80
a vyžaduje použití UNHEX()
místo toho.
Výsledkem jsou tyto výsledky:
latin1 utf8
----------------------------------------
Björn Björn