Кодирането на знаци, подобно на часовите зони, е постоянен източник на проблеми.
Това, което можете да направите, е да потърсите всякакви символи с "висок ASCII", тъй като това са или LATIN1 акцентирани знаци или символи, или първият от многобайтов знак UTF-8. Да разбереш разликата няма да е лесно, освен ако не изневериш малко.
За да разберете кое кодиране е правилно, просто SELECT
две различни версии и сравнете визуално. Ето един пример:
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'), ']')
Това се прави необичайно сложно, тъй като механизмът за регулярни изрази на MySQL изглежда игнорира неща като \x80
и налага използването на UNHEX()
вместо това.
Това води до такива резултати:
latin1 utf8
----------------------------------------
Björn Björn