Ho iniziato ad aggiornare un mio progetto che usa un DB MySQL e, analizzando il contenuto, mi sono accorto che alcuni caratteri erano sballati:
Fuga dalla cittÃ
... anziché...
Fuga dalla città
La tabella ha collation utf8_general_ci e la colonna, nello specifico, ha collation utf8mb4.
Quale poteva essere il problema?
Ecco, alla fine il problema era il sistema di collegamento al DB, che per una configurazione errata faceva un "doppio encoding" nella tabella.
In pratica, il software lo utilizzava come fosse latin1.
Per capire se è questo l'errore, basta fare una query di controllo:
SELECT CONVERT(CAST(CONVERT(nome_colonna USING latin1) AS BINARY) USING utf8mb4)
FROM nome_tabella
WHERE id = 1;
Se il risultato è quello voluto (e non quello con i caratteri strani), allora il problema è proprio quello.
La soluzione è semplice: modificare la tabella DUE VOLTE, la prima impostando il character set a latin1 e poi ri-modificarlo in utf8mb4:
-- prima conversione
ALTER TABLE nome_tabella
MODIFY nome_colonna TEXT
CHARACTER SET latin1
COLLATE latin1_swedish_ci;
-- seconda conversione
ALTER TABLE nome_tabella
MODIFY nome_colonna TEXT
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Note:
- la connessione deve utilizzare questo: SET NAMES utf8mb4;
- sempre fare backup della tabella (o del database), prima!
Nessun commento:
Posta un commento