Eine Sammlung möglicher Probleme bei der Migration von SQLite3 nach MySQL

Eine Sammlung möglicher Probleme bei der Migration von SQLite3 nach MySQL

Kurzbeschreibung

Passend für Leser: Mobile Entwicklung

Beim Migrieren von SQLite3-Daten nach MySQL treten viele Syntaxprobleme auf. Es ist unmöglich, alle Probleme auf einmal aufzulisten. In diesem Artikel werden so viele Probleme wie möglich aufgelistet, da jeder auf unterschiedliche Probleme stößt. Mithilfe dieses Artikels können Leser im Voraus vorhersagen, ob sie auf Probleme stoßen werden. Wenn sie wissen, was sie erwartet, können sie unerwartete Probleme vermeiden oder reduzieren, die nach der Datenmigration auftreten können. Anhand der Liste der Probleme können Sie erkennen, welche Probleme Sie lösen müssen. Ich werde Ihnen auch eine Lösung zu Ihrer Information bereitstellen. Für das Migrationsproblem gibt es keine Universallösung, da jeder auf andere Probleme stößt. Wenn in der Lösung gleichzeitig einige widersprüchliche Probleme vorhanden sind, wird es zu einem Problem.

Okay, kommen wir gleich zur Sache!

Fragenliste

1. Verschiedene von SQLite3 ausgegebene Variablen werden in MySQL nicht erkannt, z. B. (BEGIN TRANSACTION, COMMIT usw.).

2. Die SQLite-Datenbankdaten können das versteckte Feld „rowid“ nicht exportieren.

3. Das Datenexportformat der SQLite-Datenbank ist nicht mit anderen Datenbanken kompatibel, beispielsweise mit einfachen und doppelten Anführungszeichen

4. Die exportierten SQLite-Daten haben keine Spaltennamen, wie im INSERT INTO protocol VALUES('大類頁(新)', ' ') gezeigt. Was wir möglicherweise benötigen, ist INSERT INTO protocol('text1','text2') VALUES('大類頁(新)', '刷新頁')

5. Spezielle Symbolverarbeitung, wie etwa das Escape-Zeichen "\"

6. Die Längenbeschränkungen für Tabellenfelder sind unterschiedlich

7. Effizienz beim Schreiben von Daten

Problemlösung

Erstens können Sie keine Tools wie sqliteStudio und Navicat verwenden. Hier können Sie Shell-Befehle verwenden, um die Inhaltsgenerierung direkt zu vermeiden.

TRANSAKTION BEGINNEN

BEGEHEN

EINZIGARTIGEN INDEX ERSTELLEN

PRAGMA foreign_keys=AUS

Gleichzeitig kann die Verwendung der Shell-Methode mit sehr wenig Code implementiert werden.

1. Lösen Sie das Problem, dass der Feldspaltenname nicht ausgegeben wird

Das Ausführen des sqlite3-Befehls " pragma table_info(表名); " ergibt folgende Ausgabe

0|Name|TEXT|0||0

1|Beschreibung|TEXT|0||0

Dann erhalten Sie den Spaltennamen durch Zeichenfolgenersetzung wie folgt:

Angenommen, die Variablen sind COLS = Name, Beschreibung

2. Lösen Sie das Problem mit einfachen und doppelten Anführungszeichen

Das Ausführen des sqlite3-Befehls " .mode insert && .dump 表名" ergibt folgende Ausgabe

INSERT INTO Tabellenname VALUES ('Test', 'Test');

INSERT INTO Tabellenname VALUES ('Test', 'Test');

INSERT INTO Tabellenname VALUES ('Test', 'Test');

Diese Methode kann das Problem einfacher und doppelter Anführungszeichen lösen. Hier geben wir einfache Anführungszeichen direkt und einheitlich aus.

3. Lösen Sie das Problem, dass das Standardfeld Rowid von SQLite3 nicht angezeigt werden kann. Ändern Sie hier Rowid direkt in ID

Stellen Sie den aktuellen Modus auf den Einfügemodus .dump ein.

Das Ausführen des sqlite3-Befehls " select rowid as id,$COLS from 表名" ergibt die folgende Ausgabe

INSERT INTO Tabellenname VALUES (1,'Test','Test');

INSERT INTO Tabellenname VALUES (2,'Test','Test');

INSERT INTO Tabellenname VALUES (3,'Test','Test');

4. Verwenden Sie den Shell-String-Befehl, um die zuvor erhaltenen Spaltennamen zur folgenden SQL-Anweisung hinzuzufügen

Nach der Änderung sieht es folgendermaßen aus:

INSERT INTO Tabellenname ('Name', 'Beschreibung') VALUES (1, 'Test', 'Test');

INSERT INTO Tabellenname('Name', 'Beschreibung') VALUES(2, 'Test', 'Test');

INSERT INTO Tabellenname('Name', 'Beschreibung') VALUES(3, 'Test', 'Test');

5. Verarbeitung von Escape-Zeichen

Wenn die Daten in der Datenbank Escape-Zeichen enthalten, beispielsweise: {\"lastname\":\\"天津\\"} . Wenn dieser Datentyp nicht verarbeitet wird, wird er beim Einfügen in die Datenbank zu {"lastname":\"天津\"} . Wir müssen also das Escape-Zeichen verarbeiten. Dies ist sehr einfach mit einem Shell-Befehl zu tun, z. B. mit dem Befehl: sed 's#\\#\\\\#g'
Lösungsimplementierung

Dieses Skript löst hauptsächlich die oben genannten Probleme 1 bis 5. Sie können das Skript nach Bedarf ändern.

 #!/bin/sh
 SQLITE=sqlite3
 wenn [ -z "$1" ] ; dann
   Echo-Nutzung: $0 sqlite3.db
   Ausfahrt
 fi
 DB="$1"
 TABELLEN=`"$SQLITE" "$DB" .tables`
 für TABELLE in $TABLES; tun
   ERSTELLEN = `"$SQLITE" "$DB" "SQL AUSWÄHLEN VON sqlite_master, WO Typ = \"Tabelle\" UND Name = \"$TABLE\";"`
   echo $CREATE";" |
   Schnitt -d'=' -f2 |
   sed "s/^CREATE TABLE $TABLE (/CREATE TABLE $TABLE (id int auto_increment Primärschlüssel,/g"
   COLS=`"$SQLITE" "$DB" "pragma table_info($TABLE)" | cut -d'|' -f2 `
   COLS_CS=`echo $COLS | sed 's/ /,/g'`
   echo ".mode insert \n.header on \n select rowid as id,$COLS_CS from $TABLE;\n" |
   "$SQLITE" "$DB" |
   sed "s/^INSERT INTO \"Tabelle\"/INSERT INTO $TABLE /g" |
   sed 's#\\#\\\\#g'
 Erledigt

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Migrieren von Ghost von einer SQLite3-Datenbank zu einer MySQL-Datenbank

<<:  Detaillierte Erläuterung des Linux-CRM-Bereitstellungscodes

>>:  Element Plus implementiert Affix

Artikel empfehlen

So beheben Sie Dateisystemfehler in Linux mit „fsck“

Vorwort Das Dateisystem ist für die Organisation ...

Beispiel für das Hinzufügen und Löschen von Bereichspartitionen in MySQL 5.5

einführen Die RANGE-Partitionierung basiert auf e...

Docker-Grundlagen

Vorwort: Docker ist eine Open-Source-Anwendungsco...

Eine kurze Diskussion über die Verwendung und Analyse von Nofollow-Tags

Kontroverse um Nofollow Zwischen Zac und Guoping ...

Detaillierte Erklärung zum MySQL-Datenarchivierungstool mysql_archiver

Inhaltsverzeichnis I. Überblick 2. pt-archiver Ha...

So erfassen Sie Ausnahmen in React

Inhaltsverzeichnis Vorwort Fehlergrenze Jenseits ...

So installieren und konfigurieren Sie GitLab unter Ubuntu 20.04

einführen GitLab CE oder Community Edition ist ei...

Ein Artikel, der Ihnen hilft, mehr über JavaScript-Arrays zu erfahren

Inhaltsverzeichnis 1. Die Rolle des Arrays: 2. De...