Maison >base de données >tutoriel mysql >Comment puis-je migrer facilement ma base de données de SQLite3 vers MySQL ?

Comment puis-je migrer facilement ma base de données de SQLite3 vers MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-11 14:25:11520parcourir

How Can I Easily Migrate My Database from SQLite3 to MySQL?

Migration de SQLite3 vers MySQL : une solution simple et rapide

Lors de la transition de SQLite3 vers MySQL, trouver un outil de conversion fiable et efficace peut être un défi. Bien que diverses approches existent, beaucoup nécessitent des manipulations manuelles complexes et n'offrent aucune garantie d'exactitude. Cela peut soulever des inquiétudes quant à l'intégrité des données et aux problèmes de compatibilité.

Différences dans la syntaxe SQL

En ce qui concerne la syntaxe, SQLite3 et MySQL présentent plusieurs différences qui nécessitent un examen attentif lors migration. Ceux-ci incluent :

  • Gestion des transactions : SQLite3 utilise BEGIN TRANSACTION et COMMIT, tandis que MySQL omet ces instructions.
  • Indices uniques : SQLite3 utilise CREATE UNIQUE INDEX, qui est absent dans MySQL.
  • Création de table : SQLite3 utilise des guillemets dans les noms de table (CREATE TABLE/INSERT INTO "table_name"), tandis que MySQL les omet (CREATE TABLE/INSERT INTO table_name).
  • Citations dans les schémas : SQLite3 nécessite des guillemets dans le schéma définitions, contrairement à MySQL.
  • Chaînes dans INSERT INTO : SQLite3 utilise des guillemets simples, tandis que MySQL utilise des guillemets doubles.
  • Valeurs booléennes : SQLite3 représente les booléens sous la forme « t » et « f », tandis que MySQL utilise 1 et 0.
  • Identifiants à incrémentation automatique : SQLite3 utilise AUTOINCREMENT, tandis que MySQL utilise AUTO_INCREMENT.

Un script de conversion pratique

Pour résoudre ces écarts et simplifier le processus de migration, un script Perl de base peut être utilisé. Cependant, il est essentiel de noter que son efficacité peut varier en fonction de l'ensemble de données spécifique :

#! /usr/bin/perl

while ($line = <>){
    if (($line !~  /BEGIN TRANSACTION/) &amp;&amp; ($line !~ /COMMIT/) &amp;&amp; ($line !~ /sqlite_sequence/) &amp;&amp; ($line !~ /CREATE UNIQUE INDEX/)){
        
        if ($line =~ /CREATE TABLE \&quot;([a-z_]*)\&quot;(.*)/i){
            $name = ;
            $sub = ;
            $sub =~ s/\&quot;//g;
            $line = &quot;DROP TABLE IF EXISTS $name;\nCREATE TABLE IF NOT EXISTS $name$sub\n&quot;;
        }
        elsif ($line =~ /INSERT INTO \&quot;([a-z_]*)\&quot;(.*)/i){
            $line = &quot;INSERT INTO \n&quot;;
            $line =~ s/\&quot;/\\&quot;/g;
            $line =~ s/\&quot;/\'/g;
        }else{
            $line =~ s/\'\'/\\'/g;
        }
        $line =~ s/([^\'])\'t\'(.)/THIS_IS_TRUE/g;
        $line =~ s/THIS_IS_TRUE/1/g;
        $line =~ s/([^\'])\'f\'(.)/THIS_IS_FALSE/g;
        $line =~ s/THIS_IS_FALSE/0/g;
        $line =~ s/AUTOINCREMENT/AUTO_INCREMENT/g;
        print $line;
    }
}

Ce script prend en compte diverses variations de syntaxe et effectue les transformations suivantes :

  • Supprime la gestion des transactions inutiles et les instructions d'index uniques.
  • Ajuste la syntaxe de création de table et supprime les guillemets du schéma définitions.
  • Convertit les chaînes des clauses INSERT INTO en guillemets doubles.
  • Échappe les caractères spéciaux et gère les valeurs booléennes de manière appropriée.
  • Modifie la syntaxe de l'identifiant à incrémentation automatique.

Bien que ce script réponde à des nuances spécifiques d'ensembles de données, il sert de point de départ personnalisable pour réussir Migration de SQLite3 vers MySQL.

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