Lavorando alla mia ultima applicazione (che fra poco vedrete in AppStore) ho avuto la necessità di convertire un database MySQL in SQLite, che è l’unico utilizzabile nelle applicazioni per iOS.
Sono partito, ovviamente, da un file di dump del database in questione. MySQL contiene dei comandi e delle istruzioni che non sono riconosciute da SQLite, quindi potrebbero provocare errori quando cercate di creare il nuovo database. Per effettuare al meglio tale migrazione ho trovato in rete un semplice script, che vi aiuterà in questo passaggio. Eccovelo di seguito:
#!/bin/bash
if [ "x$1" == "x" ]; then
echo "Usage: $0 "
exit
fi
cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
$a=$1;
s/\\'\''/'\'\''/g;
s/\\n/\n/g;
s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
echo "Conversion completed without error. Output file: $1.db"
rm $1.sql
rm $1.err
else
echo "There were errors during conversion. Please review $1.err and $1.sql for details."
fi
Prendete questo codice i inseritelo in un file di script (potete scaricarlo già pronto da qui); fatto ciò aprite il terminale, e utilizzate lo script sul file che vi interessa. Eccovi un esempio:
sh converter.sh db.sql
dove converter.sh è il file dello script, mentre db.sql è il database che vogliamo convertire. Nello stesso percorso troverete poi un file con estensione “.db”, quello sarà il vostro database in SQLite!
La conversione non sempre è senza errori, ma vi basterà qualche piccolo “ritocco” manuale per sistemare il tutto 😉
Fonte: JBipNet
7 comments On Come convertire un database MySQL in SQLite
non se sono in tema ma lo scrivo qua
come faccio a leggere il dump di un database sqlite?
@GioB: se lo devi modificare “manualmente” va bene un qualsiasi editor di testo, io utilizzo Espresso per Mac.
se invece devi creare il database partendo dal file di dump ti consiglio SQLite Manager, un’estensione per Firefox, che secondo me è la soluzione migliore per gestire db SQLite..
Ciao caro Andrea, spero abbia passato buone feste!
Volevo chiederti: come faccio ad esportare db da sqlite a mysql?
Grazie per la guida 🙂
Ciao e buona giornata!
Raffaele Pio
@Raffpio: su questo non ho proprio idea, però forse se esporti il db in SQL standard dovresti riuscire ad utilizzarlo anche con MySQL 😉
ciao,
scusa in anticipo l’ignoranza. Sono sempre stata un utente mac. Sonopassata da poco ad ubuntu, con cui mi trovo straordinariamente bene. Ho costruito un database in sqlite, facendo parecchie tabelle. Ora ho bisogno di collegare le tabelle fra di loro, attraverso la chiave primaria ma non ci riesco. Esiste un metodo semplice e chiaro per farlo?? Premetto che sono costretta ad utilizzare sqlite perchè è l’unico che dialoga bene con qgis. Grazie mille per l’eventuale risposta.
Amalia
@Amalia: ciao, dipende da cosa utilizzi per creare la tabella. Se utilizzi SQL puro (quindi senza ricorrere a programmi) dovrai semplicemente inserire la clausola “Foreign key” nell’attributo di un elemento collegato alla chiave primaria..
Ma sei un mito … provo subito 🙂