尝试简单的方法:

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 下,我想使用命令行,以便它可以自动化(此过程将由服务器每天完成)。

有帮助吗?

解决方案

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

其他提示

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

$ sqlite3 v2database.db
sqlite> .quit
$

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

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

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

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

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

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

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

相同的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top