PDA

View Full Version : Convertire db mysql da latin1 a utf8


birmarco
14-03-2012, 23:12
Ciao a tutti,
sto cercando di trasferire il database del mio sito da Altervista a TopHost.
Enrambi con la stessa versione di MySQL.

Esporto il database col phpMyAdmin di Altervista e lo importo su quello di TopHost. Il problema si verifica con le lettere accentate, vengono visualizzate come a maiuscola accentata più apostrofi vari.

So che c'è un problema col set di caratteri, ma come lo risolvo?

Su Altervista dovrebbe essere latin1 con collation latin1_swedish_ci, infatti leggendo il dump risulta:

CREATE DATABASE XXXX DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Ma ottengo inconguenze nella creazione della tabella, risulta infatti:

CREATE TABLE IF NOT EXISTS `avphpbb_acl_groups` (
CUT
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Quindi le tabelle sono utf8 con collate utf8_bin.

Sono andato quindi sul phpMyAdmin di TopHost e ho importato il database. E qui il problema. Ho provato vari set di caratteri in importazione:
- utf8
- latin1
- swedish

E dopo l'importazione ho provato a cambiare collation:
- utf8_unicode
- utf8_bin
- latin1_swedish

Un po' tutto ma nulla... come posso fare?

----------------------------------------------------

Soluzione pochi post sotto! ;)

birmarco
15-03-2012, 13:38
up

birmarco
15-03-2012, 16:34
Dopo ore a sbattere la testa sono riuscito a risolvere. Scrivo qui la soluzione visto che è un problema molto diffuso con i database Altervista verso qualunque altro hosting o cmq, più in generale, la conversione del charset del database MySQL.

Su internet si trovano complicate procedure con comandi linux, la mia procedura è molto più semplice (anche se sicuramente meno elegante) e adatta a chi non sa nulla di database.

Per iniziare:

Esportare il database di Altervista con il PHPMyAdmin, compatibilità NONE, in formato .sql e salvarlo sul Desktop (o dove volete)

Andare sul sito ufficiale di MySQL e scaricare l'installer per SQL Server con Workbench e installarlo sul PC. Se lo avete già va bene qualunque versione, basta che sia aggiornata almeno quando la versione che ha generato il dump con PHPMyAdmin. Su Altervista MySQL 5.1 o MySQL 4.x. Io avevo già installato la 5.5 e ho usato quella.

Aprire con un editor di testo (consiglio a questo scopo Notepad2/Notepad .net) il dump scaricato e controllare le prime righe:


CREATE DATABASE `nomeDB` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `nomeDB`;


controllate che nomeDB non sia già presente nel vostro MySQL locale, in caso contrario sosituite nomeDB (ognuno di voi avrà un nome diverso) con quello che volete. Ipotiziamo di chiamarlo "DBProva". Quindi:


CREATE DATABASE `DBProva` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `DBProva`;


Aprire MySQL Workbench, connettersi al localhost cliccando due volte su localhost nell'area bianca a sinistra.

Una volta aperta la tab SQL Editor, sulla colonna di sinistra, sotto SHEMAS, selezionare DBProva e cliccare con il pulsante destro.
Dal menu selezionare "Alter schema...". NElla finestra che si aprirà cercare il menu a tendina Collation e cambiare il valore presente in "utf8_general_ci". Cliccare su Apply e confermare.

Adesso dobbiamo aprire il promt di comando di SQL Server. Quindi andiamo su start>MySQL>MySQL Server> MySQl Command Line Client

Inserire la password e premere invio.

Dopodichè apparirà il cursore "mysql>" e lì potremmo inviare i nostri comandi.

Ora dobbiamo creare una connessione con il nostro database, quindi scriviamo:

\c DBProva;

E' importante il punto e virgola e la c minuscola. Dopodichè premere invio.
Una volta connessi scriviamo:

\C latin1 | utf8;

Occhio alla maiuscola! Questo convertirà il nostro database in utf8 da latin1. Ovviamente se avete un altro charset di input e/o output dovete indicare quello.

Fatto questo chiudiamo il promt e torniamo a WorkBench. Torniamo alla tab Home e in basso a destra clicchiamo su Import/Export.

Ora ci basterà esportare il nostro DBProva in un "self-contained file" con formato .sql. Clicchiamo su Export.

La procedura è completata!

Ora avete il vostro database nello standard unicode ;) I problemi ai caratteri speciali dovrebbero essere risolti e la compatibilità assicurata.

Ricordate di impostare il database di destinazione per ricevere un file in formato utf8.

Consiglio: potete ridurre le dimensioni del file del database, specialmente in upload, comprimendolo in zip o ancora meglio in zip con codifica BZip2.
Attenzione però che deve essere scompattato in locale prima di eseguire la procedura da me descritta. Verificate anche che il PHPMyAdmin di destinazione supporti tale compressione.

birmarco
15-03-2012, 16:35
Magari se un moderatore passa di qui può modificare il titolo della discussione in modo che sia più facilmente ricerecabile da chi ha il mio stesso problema ;)

emmedi
16-03-2012, 08:06
Modificato! ;)

birmarco
16-03-2012, 16:07
Modificato! ;)

Grazie :)