Come visualizzare i caratteri UTF-8 in phpMyAdmin?

Il mio database è impostato correttamente su UTF-8 e sto gestendo un database contenente caratteri giapponesi. Se faccio SELECT * … dalla riga di comando mysql, vedo correttamente i caratteri giapponesi. Quando estraggo i dati dal database e li visualizzo in una pagina Web, lo vedo correttamente.

Tuttavia, durante la visualizzazione dei dati della tabella in phpMyAdmin, vedo solo il testo spazzatura. vale a dire.

ç§ã¯æ- ¥ 本æ- ™ ç † Ìॠ½ãã§ã ™ â €, æ- ¥ 本æ- ™ ç † ã, …

Come posso ottenere phpMyAdmin per visualizzare i caratteri in giapponese?

La codifica dei caratteri nella pagina HTML è impostata su UTF-8.

Modificare:

Ho provato un’esportazione del mio database e ho aperto il file .sql in geany. I caratteri sono ancora confusi anche se la codifica è impostata su UTF-8. (Tuttavia, fare un mysqldump del database mostra anche caratteri confusi).

Il set di caratteri è impostato correttamente per il database e tutte le tabelle (“latin” non si trova in nessun punto del file)

CREATE DATABASE `japanese` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

Ho aggiunto le linee a my.cnf e riavviato mysql ma non ci sono cambiamenti. Sto usando Zend Framework per inserire dati nel database.

Ho intenzione di aprire una taglia per questa domanda perché voglio davvero capirlo.

Sfortunatamente, phpMyAdmin è una delle prime applicazioni php che parla correttamente con MySQL di charset. Molto probabilmente il tuo problema è dovuto al fatto che il database non memorizza le stringhe UTF-8 corrette al primo posto.

Per visualizzare correttamente i caratteri correttamente in phpMyAdmin, i dati devono essere correttamente memorizzati nel database. Tuttavia, la conversione del database in un set di caratteri corretto spesso interrompe le app Web che non dispongono di funzionalità correlate al set di caratteri fornite da MySQL.

Posso chiederlo: è MySQL> versione 4.1? Per quale app Web è il database? phpBB? Il database è stato migrato da una versione precedente dell’applicazione Web o da una versione precedente di MySQL?

Il mio suggerimento non è quello di fratello se l’app web che stai utilizzando è troppo vecchia e non supportata. Converti solo il database in UTF-8 reale se sei sicuro che l’app web possa leggerli correttamente.


Modificare:

Il tuo MySQL è> 4.1, il che significa che è sensibile al charset. Quali sono le impostazioni di fascicolazione del set di caratteri per il 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 charset (ad esempio 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 trascorse anni fa (2005?) Quando MySQL 4.0 divenne obsoleto, in molte parti dell’Asia. Esiste un modo standard per gestire il tuo problema e dati ingannati:

  1. Eseguire il backup del database come .sql
  2. Aprilo in un editor di testo in grado di UTF-8, assicurati che abbiano un aspetto corretto.
  3. Cerca charset collation latin1_general_ci , sostituisci latin1 a utf8 .
  4. Salva come nuovo file sql, non sovrascrivere il backup
  5. Importa il nuovo file, appariranno correttamente in phpMyAdmin e il giapponese nella tua app web diventerà un punto interrogativo. È normale.
  6. Per la tua app web php che si basa su php-mod-mysql, inserisci mysql_query("SET NAMES UTF8"); dopo mysql_connect() , ora i punti interrogativi saranno spariti.
  7. Aggiungi la seguente configurazione my.ini per mysql-cli:

     # CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8 

Per maggiori informazioni su charset su MySQL, consultare il 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 la mysql_connect() ), dal momento che php-mod-mysql è l’unica estensione che posso pensare che innesca ancora il problema TO THIS DAY .

phpMyAdmin usa php-mod-mysqli per connettersi a MySQL. Non ho mai imparato a usarlo perché passare a framework * per sviluppare i miei progetti di php. Vi incoraggio vivamente a farlo anche voi.

  • Molti framework, ad esempio CodeIgniter, Zend, usano mysqli o pdo per connettersi ai database. Le funzioni mod-mysql sono considerate obsolete e causano problemi di prestazioni e scalabilità. Inoltre, non vuoi bind il tuo progetto a un tipo specifico di database.

Se stai usando PDO non dimenticarti di inizializzarlo con UTF8:

  $con = new PDO('mysql:host=' . $server . ';dbname=' . $db . ';charset=UTF8', $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

(ho speso solo 5 ore per capirlo, spero che salverà qualcuno prezioso tempo …)

Ho fatto un po ‘più googling e ho trovato questa pagina

Il comando non sembra avere senso ma l’ho provato comunque:

Nel file /usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php alla fine della funzione PMA_DBI_connect() appena prima PMA_DBI_connect() return ho aggiunto:

 mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;"); mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;"); 

E funziona! Ora vedo i caratteri giapponesi in phpMyAdmin. WTF? Perché funziona?

Ho avuto lo stesso problema,

Imposta tutte le regole di confronto testo / varchar in phpMyAdmin su utf-8 e nei file php aggiungi questo:

mysql_set_charset (“utf8”, $ your_connection_name);

Questo l’ha risolto per me.

la soluzione per questo può essere semplice come:

  1. trova la funzione / metodo di connessione phpmysqladmin
  2. aggiungi questo dopo che il database è stato collegato $db_conect->set_charset('utf8');

Ecco come faccio a ripristinare i dati senza rallentamenti da latin1 a utf8:

 /** * Fixes the data in the database that was inserted into latin1 table using utf8 encoding. * * DO NOT execute "SET NAMES UTF8" after mysql_connect. * Your encoding should be the same as when you firstly inserted the data. * In my case I inserted all my utf8 data into LATIN1 tables. * The data in tables was like ДЕТСКИÐ. * But my page presented the data correctly, without "SET NAMES UTF8" query. * But phpmyadmin did not present it correctly. * So this is hack how to convert your data to the correct UTF8 format. * Execute this code just ONCE! * Don't forget to make backup first! */ public function fixIncorrectUtf8DataInsertedByLatinEncoding() { // mysql_query("SET NAMES LATIN1") or die(mysql_error()); #uncomment this if you already set UTF8 names somewhere // get all tables in the database $tables = array(); $query = mysql_query("SHOW TABLES"); while ($t = mysql_fetch_row($query)) { $tables[] = $t[0]; } // you need to set explicit tables if not all tables in your database are latin1 charset // $tables = array('mytable1', 'mytable2', 'mytable3'); # uncomment this if you want to set explicit tables // duplicate tables, and copy all data from the original tables to the new tables with correct encoding // the hack is that data retrieved in correct format using latin1 names and inserted again utf8 foreach ($tables as $table) { $temptable = $table . '_temp'; mysql_query("CREATE TABLE $temptable LIKE $table") or die(mysql_error()); mysql_query("ALTER TABLE $temptable CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci") or die(mysql_error()); $query = mysql_query("SELECT * FROM `$table`") or die(mysql_error()); mysql_query("SET NAMES UTF8") or die(mysql_error()); while ($row = mysql_fetch_row($query)) { $values = implode("', '", $row); mysql_query("INSERT INTO `$temptable` VALUES('$values')") or die(mysql_error()); } mysql_query("SET NAMES LATIN1") or die(mysql_error()); } // drop old tables and rename temporary tables // this actually should work, but it not, then // comment out this lines if this would not work for you and try to rename tables manually with phpmyadmin foreach ($tables as $table) { $temptable = $table . '_temp'; mysql_query("DROP TABLE `$table`") or die(mysql_error()); mysql_query("ALTER TABLE `$temptable` RENAME `$table`") or die(mysql_error()); } // now you data should be correct // change the database character set mysql_query("ALTER DATABASE DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci") or die(mysql_error()); // now you can use "SET NAMES UTF8" in your project and mysql will use corrected data } 

Cambia latin1_swedish_ci in utf8_general_ci in phpmyadmin-> nome_tabella-> nome_campo

Questo è dove lo trovi sullo schermo:

Innanzitutto, dal client

 mysql> SHOW VARIABLES LIKE 'character_set%'; 

Questo ti darà qualcosa di simile

 +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 

dove puoi controllare le impostazioni generali per il client, la connessione, il database

Quindi dovresti anche ispezionare le colonne da cui stai recuperando i dati

 SHOW CREATE TABLE TableName 

e ispezionando il set di caratteri e le regole di confronto dei campi CHAR (sebbene di solito le persone non li CHAR[(length)] [CHARACTER SET charset_name] [COLLATE collation_name] esplicitamente, ma è ansible dare CHAR[(length)] [CHARACTER SET charset_name] [COLLATE collation_name] in CREATE TABLE foo ADD COLUMN foo CHAR ... )

Credo di aver elencato tutte le impostazioni rilevanti sul lato di mysql. Se ti stai ancora perdendo leggi i documenti e forse questa domanda che potrebbe far luce (specialmente come ho avuto modo di farlo guardando solo al client mysql al primo tentativo).

phpmyadmin non segue la connessione MySQL perché definisce le sue corrette regole di confronto nel file di configurazione phpmyadmin.

Quindi, se non vogliamo o se non possiamo accedere ai parametri del server, dovremmo semplicemente costringerlo a inviare risultati in un formato diverso (codifica) compatibile con il client, ad esempio phpmyadmin

per esempio se sia la connessione di connessione MySQL che il set di caratteri MySQL sono utf8 ma phpmyadmin è ISO, dovremmo semplicemente aggiungere questo prima di qualsiasi query di selezione inviata a MySQL tramite phpmyadmin:

 SET SESSION CHARACTER_SET_RESULTS =latin1; 

1- Apri file:

 C:\wamp\bin\mysql\mysql5.5.24\my.ini 

2- Cerca la voce [mysqld] e aggiungi:

 character-set-server = utf8 skip-character-set-client-handshake 

L’intera vista dovrebbe essere simile a :

 [mysqld] port=3306 character-set-server = utf8 skip-character-set-client-handshake 

3- Riavvia il servizio MySQL!

Ho avuto esattamente lo stesso problema. Il set di caratteri del database è utf-8 e le regole di confronto sono utf8_unicode_ci. Sono stato in grado di vedere il testo Unicode nella mia webapp ma i risultati phpMyAdmin e sqldump erano confusi.

Si è scoperto che il problema era nel modo in cui la mia applicazione web si collegava a MySQL. Mi mancava la bandiera di codifica.

Dopo averlo risolto, sono riuscito a vedere correttamente i caratteri greci sia in phpMyAdmin che in sqldump, ma ho perso tutte le mie voci precedenti .

È davvero semplice aggiungere il multilinguaggio in myphpadmin se si ha la visualizzazione di garbdata in myphpadmin, basta andare su myphpadmin fare clic sul database vai alla scheda operazioni nella pagina della scheda operazione vedi sezione collazione impostarlo su utf8_general_ci, dopo che tutto il tuo garbdata verrà mostrato correttamente. un trucco semplice e facile

basta decommentare queste righe nelle librerie / database_interface.lib.php

 if (! empty($GLOBALS['collation_connection'])) { // PMA_DBI_query("SET CHARACTER SET 'utf8';", $link, PMA_DBI_QUERY_STORE); //PMA_DBI_query("SET collation_connection = '" . //PMA_sqlAddslashes($GLOBALS['collation_connection']) . "';", $link, PMA_DBI_QUERY_STORE); } else { //PMA_DBI_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';", $link, PMA_DBI_QUERY_STORE); } 

se si archiviano i dati in utf8 senza memorizzare charset, non è necessario phpmyadmin per riconvertire nuovamente la connessione. Questo funzionerà.

I nomi delle funzioni e dei file non corrispondono a quelli delle versioni più recenti di phpMyAdmin. Ecco come risolvere i nuovi PHPMyAdmins:

  1. Trova il file: phpmyadmin/libraries/DatabaseInterface.php

  2. In funzione: public function query

  3. Subito dopo l’apertura { aggiungi questo:

     if($link != null){ mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;"); mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;"); } 

Questo è tutto. Funziona come un fascino.

La soluzione più semplice per wamp è: vai su phpMyAdmin, fai clic su localhost, seleziona latin1_bin per le regole di confronto del server, quindi inizia a creare il database e la tabella

Inserisci:

 mysql_query("SET NAMES UTF8"); 

sotto:

 mysql_select_db(/*your_database_name*/); 

Per me funziona,

 mysqli_query($con, "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");