将MySQL数据库迁移到SQLite时出错

时间:2014-08-14 13:51:14

标签: mysql sql sqlite

我可以访问远程服务器上托管的MySQL数据库。我试图将其迁移到本地SQLite数据库。为此,我正在使用this问题所建议的this脚本。用法是

./mysql2sqlite mysqldump-opts db-name | sqlite3 database.sqlite

我试过这样做(没有转储选项),sqlite3返回错误:

Error: near line 4: near "SET": syntax error

到目前为止,我发现当我只在转储选项中指定我的一个表时,如此

./mysql2sqlite db-name table-B | sqlite3 database.sqlite

它似乎工作正常,但是当我指定第一个表(让我们称之为表-A)时,它会返回此错误。由于mysql2sqlite的输出,我很确定它会返回此错误。转储文件的第4行(我猜第4行逻辑行,或第4行开始的命令)如下所示:

CREATE TABLE "Association_data_interaction" (
  "id" int(10)  DEFAULT NULL,
  ...
  "Comments" text CHARACTER SET latin1,
  ...
  "Experiment" text CHARACTER SET latin1,
  "Methods" text CHARACTER SET latin1,
  ...
);

删除了许多其他行。我真的不太了解SQL,但据我所知,迁移脚本试图输出一个带有可以创建新数据库的命令的转储文件,但脚本必须在MySQL的输出命令和命令之间进行转换sqlite3想要创建一个数据库,并且无法正确处理文本字段。我知道当我跑SHOW COLUMNS时;在MySQL数据库中,Comments,Experiment和Methods列属于“text”类型。我能做些什么让sqlite3接受数据库?

注意:我有对数据库的编辑访问权限,但我更愿意尽可能避免这种情况。我不相信我对数据库有管理访问权限。此外,如果它是相关的,则数据库具有大约1000个表,其中大多数具有大约10,000行和10-50列。我对数据库的性能特征不太感兴趣;他们目前对我来说还不错。

1 个答案:

答案 0 :(得分:2)

那个剧本是错误的;其中一个错误是它在最后一个逗号之前需要一个空格:

gsub( /(CHARACTER SET|character set) [^ ]+ /, "" )

将该行替换为:

gsub( /(CHARACTER SET|character set) [^ ]+/, "" )