Кодировка символов, как и часовые пояса, является постоянным источником проблем.
То, что вы можете сделать, - это искать любые символы "high-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 regexp, похоже, игнорирует такие вещи, как \x80
и делает необходимым использование метода UNHEX()
.
Это приводит к следующим результатам:
latin1 utf8
----------------------------------------
Björn Björn