Come convertire un database MySQL in SQLite

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

Ingegnere informatico e sviluppatore freelance, mi occupo da anni di sviluppo per iOS (ma non solo). Dal 2008 scrivo su questo piccolo blog (con qualche lunga pausa), in cui parlo di programmazione e di qualsiasi altra cosa che mi diverta.

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 🙂

Leave a Reply to Andrea Busi Cancel Reply

Your email address will not be published.

Site Footer