”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何将 MySQL 转储 SQL 文件转换为 SQLite3 数据库?

如何将 MySQL 转储 SQL 文件转换为 SQLite3 数据库?

发布于2024-11-08
浏览:257

How to Convert a MySQL Dump SQL File to a SQLite3 Database?

将 MySQL Dump SQL 转换为 Sqlite3 DB

将 MySQL Dump SQL 文件导入 SQLite3 数据库需要转换以确保兼容性。

提供的 shell 脚本提供了一种自动转换转储的方法文件:

#!/bin/sh
# Usage: $0 

if [ "x$1" == "x" ]; then
   echo "Usage: $0 "
   exit
fi
cat $1 |
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=$1;
     s/\\'\''/'\'\''/g;
     s/\\n/\n/g;
     s/\),\(/\);\n$a\(/g;
  }
  ' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: $1.db"
  rm $1.sql
  rm $1.err
    rm tmp
else
   echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

脚本执行以下转换:

  • 删除冗余键定义。
  • 将字段设置为无符号(如果适用)。
  • 设置 auto_increment 字段主键自动增量。
  • 将整数类型转换为其在 SQLite 中的等效类型(smallint、tinyint 和int 变为整数)。
  • 删除字符集。
  • 将枚举类型转换为 varchar(255)。
  • 删除对更新触发器的集合引用。
  • 转换多行插入到单个插入以实现 SQLite 兼容性。
  • 将转换后的 SQL 包装在事务中 安全。
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3