Guida basata su un intervento sistemistico concluso e verificato. Caso reale: durante il trasferimento di una vecchia applicazione CakePHP, i caratteri accentati risultavano corrotti. Individuata la divergenza di codifica del database.
Sintomo
Dopo il trasferimento di una vecchia applicazione CakePHP da MySQL a MariaDB, alcune stringhe con accenti apparivano illeggibili. La causa non era CSS, font o cache del browser: il problema riguardava l'interpretazione dei byte tra applicazione, connessione SQL, tabelle e dati storici.
I livelli da distinguere
MySQL/MariaDB espone una codifica del server, una del database, una per tabella e colonna e tre variabili di connessione (character_set_client, character_set_connection, character_set_results). È possibile avere una pagina HTML UTF-8 che legge dati salvati storicamente in latin1: forzare UTF-8 senza conversione consapevole può peggiorare la situazione.
Ricognizione SQL
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
SHOW CREATE DATABASE nome_database;
SHOW CREATE TABLE nome_tabella;
SELECT HEX(nome_colonna), nome_colonna FROM nome_tabella LIMIT 10;
HEX() aiuta a distinguere una rappresentazione errata in output da byte già danneggiati nel database. Non eseguire ALTER TABLE ... CONVERT TO CHARACTER SET senza backup e prova su una copia.
Controlli dell'applicazione
Verificare la configurazione del datasource CakePHP e la codifica comunicata da PHP alla connessione SQL. Controllare anche Content-Type della risposta HTTP e le eventuali operazioni di serializzazione di dati legacy.
Correzione del caso
Nell'intervento documentato la causa è stata risolta riconoscendo che i dati dell'applicazione erano memorizzati in latin1 e ripristinando una configurazione coerente della connessione e del database. Non era corretto convertire indiscriminatamente tutto a UTF-8 senza ricostruire prima la codifica originale.
Test finali
Verificare caratteri accentati, apostrofi tipografici, simboli speciali, ricerche, salvataggi e letture successive. Un controllo esclusivamente visivo della homepage non basta: testare anche dati dinamici e contenuti già presenti.
Ulteriori anomalie
Nel progetto era emersa anche una notice di unserialize su un comportamento CakePHP legacy. Va diagnosticata separatamente: riparare l'encoding non dimostra che i dati serializzati siano tutti coerenti.
Guide correlate
I comandi con nomi segnaposto vanno adattati al proprio ambiente. Le configurazioni di produzione, gli IP e le credenziali non sono riportati.