Domanda

Ho ascoltato questo problema per alcune ore ieri:

Ho un database sul server MySQL 4.1.22 con codifica impostata su " UTF-8 Unicode (utf8) " (come riportato da phpMyAdmin). Le tabelle in questo database hanno set di caratteri predefinito impostato su latin2 . Ma l'applicazione web (CMS Made Simple scritta in PHP) che la utilizza visualizza le pagine in utf8 ...

Per quanto possa essere complicato, in realtà funziona. L'app Web visualizza correttamente i caratteri (vengono utilizzati principalmente ceco e polacco).

Corro: " mysqldump -u xxx -p -h yyy dbname > dump.sql " ;. Questo mi dà uno script SQL che:

  • sembra perfetto in qualsiasi editor (come Blocco note +) quando viene visualizzato in UTF-8 - tutti i caratteri vengono visualizzati correttamente
  • tutte le tabelle nello script hanno set di caratteri predefinito impostato su latin2
  • ha " / *! 40101 SET NAMES latin2 * /; " riga all'inizio (tra le altre impostazioni)

Ora, voglio esportare questo database su un altro server in esecuzione su MySQL 5.0.67, anche con la codifica del server impostata su " UTF-8 Unicode (utf8) " ;. Ho copiato l'intera installazione di CMS Made Simple, ho copiato lo script dump.sql ed eseguito & Quot; mysql -h ddd -u zzz -p dbname & Lt; dump.sql " ;. Successivamente, tutti i personaggi vengono criptati durante la visualizzazione delle pagine Web CMSMS.

Ho provato a impostare:
SET character_set_client = utf8;
SET character_set_connection = latin2;

E tutte le combinazioni (solo per sicurezza, anche se per me non ha alcun senso): latin2 / utf8, latin2 / latin2, utf8 / utf8, ecc. - non aiuta. Tutti i personaggi sono ancora confusi, tuttavia a volte in modo diverso :).

Ho anche provato a sostituire tutte le impostazioni di latin2 con utf8 nello script (impostare nomi e set di caratteri predefiniti per le tabelle). Niente.

Ci sono degli esperti di MySQL che potrebbero spiegare in poche parole (sono sicuro che dopo tutto è semplice) come funziona davvero tutta questa codifica? Ho letto 9.1.4. Set di caratteri di connessione e regole di confronto ma non ho trovato nulla di utile lì.

Grazie, Matt

È stato utile?

Soluzione 2

Ugh ... ok, sembra di aver trovato una soluzione.

MySQL non è il colpevole qui. Ho fatto un semplice dump e caricamento ora, senza modifiche allo script dump.sql, il che significa che ho lasciato & Quot; imposta i nomi latin2 & Quot; e tavoli charsets come erano. Quindi ho passato la mia installazione CMSMS originale al nuovo database e ... ha funzionato correttamente. Quindi in realtà la codifica nel database è ok, o almeno funziona bene con l'installazione CMSMS che avevo nel mio vecchio provider di hosting (apparentemente CMSMS fa cose divertenti con la codifica dei caratteri ).

Per farlo funzionare sul mio nuovo provider di hosting, in realtà ho dovuto aggiungere questa linea a lib / adodb / drivers / adodb-mysql.inc.php nell'installazione di CMSMS:

mysql_query('set names latin2',$this->_connectionID);

Questa è una soluzione leggermente modificata da questo post . Puoi trovare la linea esatta anche lì. Quindi sembra un problema di configurazione del client mysql.

Altri suggerimenti

Hai provato ad aggiungere l'opzione --default-character-set = name, in questo modo:

mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql

Ho avuto quel problema prima e ha funzionato dopo aver usato quell'opzione.

Spero che sia d'aiuto!

SOLUZIONE per me:

imposta questa opzione nel tuo file php, dopo mysql_connect (o dopo mysql_select_db ) ..

mysql_query("SET NAMES 'utf8'");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top