如何將 MySQL 轉儲檔案轉換為 SQLite 可匯入格式?

DDD
發布: 2024-10-28 18:16:30
原創
464 人瀏覽過

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

將MySQL 轉儲檔案轉換為SQLite 可匯入格式

問題:

將匯出的MySQL 轉儲SQL檔案導入SQLite3直接使用sqlite3工具存取資料庫是不成功的。如何解決這個問題?

解決方案:

以下shell 腳本可以將MySQL 轉儲檔案轉換為可以匯入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
登入後複製

說明:

  • 腳本首先從MySQL 轉儲檔案中過濾掉某些在匯入SQLite3 時可能導致問題的行,例如鍵約束和字元集定義。
  • 然後將特定資料類型(例如smallint 和int)轉換為整數,並刪除任何無符號修飾符。
  • 該腳本將枚舉資料類型轉換為varchar(255) 並刪除任何更新子句。
  • 它將 SQL 語句包裝在開始和提交事務區塊中。
  • 腳本會修正任何轉義的換行符,並將多行 INSERT 語句分割為單獨的語句。
  • 最後將修改後的SQL檔案匯入到SQLite3資料庫。

以上是如何將 MySQL 轉儲檔案轉換為 SQLite 可匯入格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!