代码之家  ›  专栏  ›  技术社区  ›  levhita

如何处理sqlite2到sqlite3迁移中的utf-8字符

  •  1
  • levhita  · 技术社区  · 16 年前

    尝试简单的方法:

    sqlite2 mydb.db.dump_sqlite3 mydb-new.db

    我得到这个错误:

    第84802行附近的SQL错误:没有这样的列:_

    在这一行中,脚本如下:

    插入车辆值(127548,'21K0065217', γ ,'PA007808',6521727989,3468,'1998-07-30 00:00:00.000000',14/697/98-07',2',1);

    我猜是这样的 “无引号”是问题所在 .

    有什么想法吗?

    PD:我现在在Windows下,我想使用命令行,这样它就可以自动化(这个过程将由服务器每天完成)。

    4 回复  |  直到 16 年前
        1
  •  1
  •   ygrek    15 年前

    只需使用sqlite3 binary cli打开v2数据库,然后保存它。数据库文件将透明地迁移到v3。

    它不起作用。

    $sqlite3 db2
    SQLite version 3.6.16
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> .tables
    Error: file is encrypted or is not a database
    sqlite> .q
    

    文件没有更改(显然sqlite3无法读取)。我认为最初的问题是sqlite2中的一个bug。

        2
  •  2
  •   Kyle Brantley    16 年前

    只需使用sqlite3 binary cli打开v2数据库,然后保存它。数据库文件将透明地迁移到v3。

    $ sqlite3 v2database.db
    sqlite> .quit
    $
    

    注意:您可能需要在退出前插入/删除一行以强制更新。

        3
  •  1
  •   levhita    16 年前

    没人回答…最后,我修改了原始脚本(最初创建sqlite2数据库的脚本)来直接在sqlite3中创建数据库。

    我认为一个大的字符串处理脚本(大是因为MI数据库有800MB和200MB)可以完成这项工作,但是直接生成数据库对我来说更容易。

        4
  •  0
  •   levhita    16 年前

    我尝试在没有Windows干预的情况下进行:

    *通过在old.db上调用sqlite2,并将转储直接发送到文件

    *然后在new.db上调用sqlite3并直接从文件加载转储。

    以防Windows在命令行上乱涂字符。

    同样的结果。

    推荐文章