Tegnkodning er ligesom tidszoner en konstant kilde til problemer.
Hvad du kan gøre, er at kigge efter "høj-ASCII"-tegn, da disse enten er LATIN1-accenttegn eller symboler, eller det første af et UTF-8 multi-byte-tegn. Det bliver ikke let at se forskel, medmindre du snyder en smule.
For at finde ud af, hvilken kodning der er korrekt, SELECT
to forskellige versioner og sammenligne visuelt. Her er et eksempel:
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'), ']')
Dette gøres usædvanligt kompliceret, fordi MySQL regexp-motoren ser ud til at ignorere ting som \x80
og gør det nødvendigt at bruge UNHEX()
metode i stedet.
Dette giver resultater som dette:
latin1 utf8
----------------------------------------
Björn Björn