Maison  >  Article  >  base de données  >  Comment convertir des fichiers de vidage MySQL au format SQLite-Importable ?

Comment convertir des fichiers de vidage MySQL au format SQLite-Importable ?

DDD
DDDoriginal
2024-10-28 18:16:30465parcourir

 How to Convert MySQL Dump Files into SQLite-Importable Format?

Conversion des fichiers de vidage MySQL au format importable SQLite

Problème :

Importation d'un fichier SQL de vidage MySQL exporté dans un SQLite3 la base de données utilisant directement l'outil sqlite3 ne réussit pas. Comment cela peut-il être résolu ?

Solution :

Le script shell suivant peut convertir le fichier de vidage MySQL dans un format pouvant être importé dans SQLite3 :

#!/bin/sh
if [ "x" == "x" ]; then
   echo "Usage:  <dumpname>"
   exit
fi
cat  |
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' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
  if (/^(INSERT.+?)\(/) {
     $a=;
     s/\'\''/'\'\''/g;
     s/\n/\n/g;
     s/\),\(/\);\n$a\(/g;
  }
  ' > .sql
cat .sql | sqlite3 .db > .err
ERRORS=`cat .err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: .db"
  rm .sql
  rm .err
    rm tmp
else
   echo "There were errors during conversion.  Please review .err and .sql for details."
fi

Explication :

  • Le script filtre d'abord certaines lignes du fichier de vidage MySQL qui peuvent causer des problèmes lors de l'importation dans SQLite3, telles que les contraintes de clé et le jeu de caractères. définitions.
  • Il convertit ensuite des types de données spécifiques, tels que smallint et int, en entier et supprime tous les modificateurs non signés.
  • Le script convertit les types de données enum en varchar(255) et supprime tout sur clauses de mise à jour.
  • Il enveloppe les instructions SQL dans un bloc de transaction de début et de validation.
  • Le script corrige tous les caractères de nouvelle ligne échappés et divise les instructions INSERT avec plusieurs lignes en instructions individuelles.
  • Enfin, il importe le fichier SQL modifié dans la base de données SQLite3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn