如何处理sqlite2到sqlite3迁移中的UTF-8字符
-
01-07-2019 - |
题
尝试简单的方法:
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 弄乱了命令行上的字符。
相同的结果。