Sfortunatamente, phpMyAdmin è una delle prime applicazioni php che parla correttamente con MySQL di charset. Il tuo problema è molto probabilmente dovuto al fatto che il database non memorizza le stringhe UTF-8 corrette in primo luogo.
Per visualizzare correttamente i caratteri in phpMyAdmin, i dati devono essere correttamente memorizzati nel database. Tuttavia, convertire il database nel set di caratteri corretto spesso interrompe le app Web che non sono a conoscenza della funzionalità relativa al set di caratteri fornita da MySQL.
Posso chiedere:MySQL è> versione 4.1? A quale web app è destinato il database? phpBB? Il database è stato migrato da una versione precedente dell'app Web o da una versione precedente di MySQL?
Il mio consiglio è di non fratello se l'app web che stai utilizzando è troppo vecchia e non supportata. Converti il database in UTF-8 reale solo se sei sicuro che l'app Web possa leggerli correttamente.
Modifica:
Il tuo MySQL è> 4.1, ciò significa che è charset-aware. Quali sono le impostazioni di confronto dei set di caratteri per il tuo database? Sono abbastanza sicuro che stai usando latin1
, che è il nome MySQL per ASCII, per memorizzare il testo UTF-8 in "byte", nel database.
Per i client insensibili al set di caratteri (ad es. mysql-cli e php-mod-mysql), i caratteri vengono visualizzati correttamente poiché vengono trasferiti al/dal database come byte. In phpMyAdmin, i byte vengono letti e visualizzati come caratteri ASCII, questo è il testo spazzatura che sembri.
Innumerevoli ore erano state trascorse anni fa (2005?) quando MySQL 4.0 è diventato obsoleto, in molte parti dell'Asia. Esiste un modo standard per gestire il tuo problema e i dati inghiottiti:
- Esegui il backup del database come
.sql
- Aprilo nell'editor di testo compatibile con UTF-8, assicurati che abbiano un aspetto corretto.
- Cerca
charset collation latin1_general_ci
, sostituiscilatin1
autf8
. - Salva come nuovo file sql, non sovrascrivere il backup
- Importa il nuovo file, ora apparirà correttamente in phpMyAdmin e il giapponese sulla tua app web diventerà punti interrogativi. È normale.
- Per la tua app Web php che si basa su php-mod-mysql, inserisci
mysql_query("SET NAMES UTF8");
dopomysql_connect()
, ora i punti interrogativi saranno spariti. -
Aggiungi la seguente configurazione
my.ini
per mysql-cli:# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8
Per ulteriori informazioni su charset su MySQL, fare riferimento al manuale: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
Nota che presumo che la tua app web stia usando php-mod-mysql per connettersi al database (da qui il mysql_connect()
funzione), poiché php-mod-mysql è l'unica estensione che mi viene in mente che ancora attiva il problema FINO A QUESTO GIORNO.
phpMyAdmin usa php-mod-mysqli per connettersi a MySQL. Non ho mai imparato a usarlo perché sono passato ai framework* per sviluppare i miei progetti php. Incoraggio vivamente a farlo anche tu.
- Molti framework, ad es. CodeIgniter, Zend, usa mysqli o pdo per connettersi ai database. le funzioni mod-mysql sono considerate obsolete causano problemi di prestazioni e scalabilità. Inoltre, non vuoi collegare il tuo progetto a un tipo specifico di database.