Mysql
 sql >> Database >  >> RDS >> Mysql

Come rilevare i caratteri UTF-8 in una colonna con codifica Latin1 - MySQL

La codifica dei caratteri, come i fusi orari, è una fonte costante di problemi.

Quello che puoi fare è cercare qualsiasi carattere "ASCII alto" poiché questi sono caratteri o simboli accentati LATIN1 o il primo di un carattere multibyte UTF-8. Dire la differenza non sarà facile a meno che tu non bari un po'.

Per capire quale codifica è corretta, basta SELECT due versioni differenti e confrontare visivamente. Ecco un esempio:

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'), ']')

Questo è reso insolitamente complicato perché il motore MySQL regexp sembra ignorare cose come \x80 e rende necessario l'uso di UNHEX() metodo invece.

Questo produce risultati come questo:

latin1                utf8
----------------------------------------
Björn                Björn