【问题标题】:How to handle UTF-8 characters in sqlite2 to sqlite3 migration如何处理 sqlite2 到 sqlite3 迁移中的 UTF-8 字符
【发布时间】:2010-09-10 20:09:22
【问题描述】:

尝试简单的方法:

sqlite2 mydb.db .dump | sqlite3 mydb-new.db

我收到了这个错误:

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

在该行中,脚本是这样的:

插入车辆值(127548,'21K0065217',Ñ,'PA007808',65217,279,1989,3,468,'1998-07-30 00:00:00.000000','14 /697/98-07',2,'',1);

我的猜测是没有引号的 'Ñ' 是问题

有什么想法吗?

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

【问题讨论】:

    标签: windows command-line utf-8 sqlite sqlite2


    【解决方案1】:

    只需使用 sqlite3 二进制 CLI 打开 v2 数据库,然后保存即可。数据库文件将透明迁移到 v3。

    $ sqlite3 v2database.db
    sqlite> .quit
    $
    

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

    【讨论】:

    • 真的,这么简单?,我手头没有数据库了,所以我无法真正测试它,但是一旦我掌握了一些测试数据,我就会尝试一下
    【解决方案2】:

    只需使用 sqlite3 二进制 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 中的一个错误。

    【讨论】:

    • 我也遇到过这种情况...Error: file is encrypted or is not a database 有什么解决办法吗?
    【解决方案3】:

    好吧,没有人回答...最后我修改了我的原始脚本(首先创建 sqlite2 数据库的那个),以直接在 sqlite3 中创建数据库。

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

    【讨论】:

      【解决方案4】:

      我尝试在没有 Windows 干预的情况下这样做:

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

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

      以防万一 windows 弄乱了命令行上的字符。

      同样的结果。

      【讨论】:

        猜你喜欢
        • 2013-04-22
        • 2013-05-27
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 2012-02-28
        • 2014-07-18
        • 2010-10-21
        相关资源
        最近更新 更多