我可以访问远程服务器上托管的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列。我对数据库的性能特征不太感兴趣;他们目前对我来说还不错。
答案 0 :(得分:2)
那个剧本是错误的;其中一个错误是它在最后一个逗号之前需要一个空格:
gsub( /(CHARACTER SET|character set) [^ ]+ /, "" )
将该行替换为:
gsub( /(CHARACTER SET|character set) [^ ]+/, "" )