sqlite3 から mysql に移行するときに起こりうる問題のコレクション

sqlite3 から mysql に移行するときに起こりうる問題のコレクション

簡単な説明

適切な読者: モバイル開発

sqlite3 データを mysql に移行する場合、多くの構文上の問題が発生します。一度にすべての問題をリストすることは不可能です。誰もが異なる問題に遭遇するため、この記事ではできるだけ多くの問題をリストアップします。読者はこの記事を参考にして、問題が発生するかどうかを事前に予測することができます。何が起こるかを知っておくと、データの移行後に発生する可能性のある予期しない問題を回避または軽減するのに役立ちます。問題リストを見ると、どのような問題を解決する必要があるかがわかります。参考までに解決策も提供します。移行の問題には、誰もが異なる問題に遭遇するため、万能の解決策はありません。解決策の中に矛盾する問題が同時に存在する場合、問題になります。

さて、早速本題に入りましょう!

質問リスト

1. sqlite3 によってダンプされたさまざまな変数 (BEGIN TRANSACTION、COMMIT など) は、mysql では認識されません。

2. sqliteデータベースデータは隠しフィールドrowidをエクスポートできません

3. sqliteデータベースのデータエクスポート形式は、一重引用符や二重引用符など、他のデータベースと互換性がありません。

4. エクスポートされた sqlite データには、 INSERT INTO protocol VALUES('大類頁(新)', ' ')に示すように、列名がありません。必要なのはINSERT INTO protocol('text1','text2') VALUES('大類頁(新)', '刷新頁')です。

5. エスケープ文字「\」などの特殊記号処理

6. テーブルフィールドの長さ制限が異なる

7. データ書き込み効率

問題解決

まず、sqliteStudio や Navicat などのツールは使用できません。ここでは、シェル コマンドを使用してコンテンツ生成を直接回避できます。

取引を開始

専念

一意のインデックスを作成する

プラグマ外部キー=OFF

同時に、シェル メソッドを使用すると、非常に少ないコードで実装できます。

1. フィールド列名が出力されない問題を解決する

sqlite3コマンド「 pragma table_info(表名); 」を実行すると、次の出力が得られます。

0|名前|テキスト|0||0

1|説明|テキスト|0||0

次に、次のように文字列置換によって列名を取得します。

変数はCOLS = name、descriptionであると仮定します。

2. 一重引用符と二重引用符の問題を解決する

sqlite3コマンド「 .mode insert && .dump 表名」を実行すると、次の出力が得られます。

テーブル名にINSERT INTO VALUES ('test',' test');

テーブル名にINSERT INTO VALUES ('test','test');

テーブル名にINSERT INTO VALUES ('test','test');

この方法は、シングルクォートとダブルクォートの問題を解決できます。ここでは、シングルクォートを均一に直接出力します。

3. sqlite3のデフォルトフィールドrowidが表示されない問題を解決します。ここでは、rowidを直接idに変更します。

現在のモードを.dump挿入モードに設定する

sqlite3コマンド「 select rowid as id,$COLS from 表名」を実行すると、次の出力が得られます。

テーブル名にINSERT INTO VALUES (1,'test',' test');

テーブル名にINSERT INTO VALUES (2,'test','test');

テーブル名にINSERT INTO VALUES (3,'test','test');

4. シェル文字列コマンドを使用して、以前に取得した列名を次のSQL文に追加します。

変更後は次のようになります。

テーブル名 ('name',' description') に INSERT INTO VALUES (1,'test',' test');

テーブル名('name',' description')にINSERT INTO VALUES(2,'test','test');

テーブル名('name',' description')にINSERT INTO VALUES(3,'test','test');

5. エスケープ文字の処理

データベース内のデータにエスケープ文字が含まれている場合、例: {\"lastname\":\\"天津\\"} 。このタイプのデータが処理されない場合、データベースに挿入されると{"lastname":\"天津\"}になります。したがって、エスケープ文字を処理する必要があります。シェルコマンドを使用して処理するのは非常に簡単です。たとえば、コマンド: sed 's#\\#\\\\#g'などです。
ソリューションの実装

このスクリプトは主に上記1〜5の問題を解決します。必要に応じてスクリプトを変更できます。

 #!/bin/sh
 SQLite = sqlite3
 if [ -z "$1" ] ; then
   echo 使用法: $0 sqlite3.db
   出口
 フィ
 DB="$1"
 テーブル = `"$SQLITE" "$DB" .tables`
 $TABLES内のTABLEに対して、
   CREATE=`"$SQLITE" "$DB" "SELECT sql FROM sqlite_master WHERE type=\"table\" AND name = \"$TABLE\";"`
   echo $CREATE";" |
   カット -d'=' -f2 |
   sed "s/^CREATE TABLE $TABLE (/CREATE TABLE $TABLE (id int auto_increment 主キー ,/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 \"table\"/INSERT INTO $TABLE /g" |
   's#\\#\\\\#g' を実行します
 終わり

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Ghost を SQLite3 データベースから MySQL データベースに移行する

<<:  Linux CRM デプロイメント コードの詳細な説明

>>:  Element PlusはAffixを実装します

推薦する

IISMonitor を使用して Web ページを監視し、IIS を自動的に再起動します。

目次1. ツールの紹介2. ワークフロー3. 操作インターフェースとパラメータ設定(1)監視と再起動...

JavaScript の基礎: エラーキャプチャメカニズム

目次序文エラーオブジェクト投げる試して…捕まえて…最後に最終ルールトライ/キャッチパフォーマンスウィ...

Linux で jar パッケージを起動してバックグラウンドで実行する方法

jar パッケージを実行する Linux コマンドは次のとおりです。方法1: java -jar s...

Typora コードブロックのカラーマッチングとタイトルシリアル番号実装コード

効果: タイトルには独自のシリアル番号があり、コードブロックには配色があり、コードブロックの左上隅に...

CSS はこのように使用できますか?気まぐれなグラデーションの芸術

前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...

VueはGraphVisを使用して無限に拡張された関係グラフを開発します

1. GraphVis 公式サイトにアクセスして、対応する js をダウンロードします。js の新し...

指定したディレクトリに nginx をインストールする方法の例

会社の要件により、異なる場所にある 2 つの nginx サーバーを同じマシンにインストールする必要...

docker pullがリセットされる問題を解決する

この記事では、docker pull がリセットされる問題を解決する方法を紹介し、皆さんと共有します...

Mysql は null 値の first/last メソッドの例を実装します

序文MySQL が SQL SELECT コマンドと WHERE 句を使用してテーブルからデータを読...

MySQL mysqladmin クライアントの使用の概要

目次1. サーバーの状態を確認します。 2. ルートパスワードを変更します。 3. mysqlser...

ウェブページ作成時に標準 HTML コードを使用する際のポイント

多くの Web サイト デザイナーが犯す最も一般的な間違いは、Web ページが IE で正常に表示さ...

JS でモバイルのインタラクティブ エクスペリエンスを向上させる方法

目次1. 即時フィードバック1.1 ボタンからの即時フィードバック1.2 継続的なフィードバック1....

MySQL 最適化 Zabbix パーティション最適化

zabbix を利用する上での最大のボトルネックはデータベースです。zabbix のデータストレージ...

ウェブデザイン必携ハンドブック 216 ウェブセーフカラー

Web ページ上の色の表現は、さまざまな要因によって影響を受けます。Web ページで非常に美しい配色...

https ウェブサイトを展開し、Nginx でアドレス書き換えを構成するための詳細な手順

Nginx は、高性能な Web サイト サーバーおよびリバース プロキシ サーバーであり、IMAP...