【问题标题】:Error when migrating MySQL database to SQLite将 MySQL 数据库迁移到 SQLite 时出错
【发布时间】:2014-08-14 13:51:13
【问题描述】:

我可以访问托管在远程服务器上的 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 数据库中,注释、实验和方法列属于“文本”类型。我该怎么做才能让 sqlite3 接受数据库?

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

【问题讨论】:

    标签: mysql sql sqlite


    【解决方案1】:

    那个脚本有问题;其中一个错误是它需要在最后一个逗号之前有一个空格:

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

    将该行替换为:

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

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2013-10-09
      • 1970-01-01
      • 2016-09-04
      • 2011-07-16
      • 1970-01-01
      • 2020-10-12
      • 2016-06-14
      • 1970-01-01
      相关资源
      最近更新 更多