如何将 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学习者快速成长!