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

发布于 2024-07-05 18:44:02 字数 501 浏览 8 评论 0原文

尝试简单的方法:

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

Trying the easy approach:

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

I got this error:

SQL error near line 84802: no such column: Ð

In that line the script is this:

INSERT INTO vehiculo VALUES(127548,'21K0065217',Ñ,'PA007808',65217,279,1989,3,468,'1998-07-30 00:00:00.000000','14/697/98-07',2,'',1);

My guess is that the 'Ñ' without quotes is the problem.

any idea?

PD: I'm under Windows right now and I would like to use the command-line so it can be automatized (this process will be done on daily basis by a server).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

云之铃。 2024-07-12 18:44:02

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

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

Well nobody answer... at the end I end up modifying my original script(the one that created the sqlite2 database in the first place) to create the database directly in sqlite3.

I think that a big string processing script(big because mi databases are 800mb and 200mb each) can do the job, but generating the database directly was easier for me.

酒几许 2024-07-12 18:44:02

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

Simply open the v2 database with the sqlite3 binary CLI, and then save it. The database file will be transparently migrated to v3.

It doesn't work.

$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

And the file is not changed (apparently sqlite3 couldn't read it). I think the original problem is a bug in sqlite2.

若无相欠,怎会相见 2024-07-12 18:44:02

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

$ sqlite3 v2database.db
sqlite> .quit
$

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

Simply open the v2 database with the sqlite3 binary CLI, and then save it. The database file will be transparently migrated to v3.

$ sqlite3 v2database.db
sqlite> .quit
$

Note: you may need to insert/delete a row before quitting to force an update.

苦妄 2024-07-12 18:44:02

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

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

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

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

相同的结果。

I tried to do it without windows intervention:

*by calling sqlite2 on old.db, and send the dump directly to a file

*and then call sqlite3 on new.db and loading the dump directly from the file.

Just in case windows was messing with the characters on the command-line.

Same Result.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文