SQLite UTF-8编码

11

我尝试运行一个包含UTF-8字符串的脚本(.read FILE),我使用了pragma命令:

PRAGMA encoding="UTF-8";

但我得到了错误的字符。 如果我自己创建表并插入值,一切都正常。我应该怎么做才能正确运行脚本?

顺便说一句,我查阅了很多关于stackoverflow和其他资源以及阅读文档的问题/文章。我尝试了一些方法,例如在Windows cmd中使用chcp 65001 ,然后在当前窗口中打开sqlite3 ,但没有帮助。


有三种编码需要验证:控制台编码、sqlite3程序正在使用的编码(可能与控制台编码不同)以及数据库的编码(执行PRAGMA encoding;进行检查)。我怀疑在被SQLite持久化之前,字符串已经混淆了。您还可以使用Python进行检查,它可以直接与SQLite数据库通信(使用sqlite3模块)。 - code_onkel
@code_onkel 我已将Windows命令行编码更改为UTF-8 chcp 65001,然后更改了数据库编码 PRAGMA encoding="UTF-8";,接着使用Notepad++多次更改文件编码。但是没有任何效果。我只是将坏字符更改为另一个坏字符。在Firebird数据库中一切都正常。 - Keltar Helviett
我认为你应该更清楚地表明你实际在做什么(你试图插入哪些字符串,环境中有哪些语言/编码设置)。我在我的德语Win7机器上进行了快速测试,并能够正确地插入Umlaute(äöü),而不使用chcp(通过Python验证)。 - code_onkel
@code_onkel,我只需要将字体更改为Lucida控制台。哈哈。无论如何,谢谢你。 - Keltar Helviett
2个回答

8
PRAGMA encoding设置不会改变您使用SQLite API的方式。现有数据库的编码无法更改。 不要使用它。 sqlite3.exe命令行工具不能处理UTF-8字符。(除非在最新版本中) 不要使用它。
如果您自己的脚本和应用程序使用UTF-8编码的字符串,并且使用任何工具(除了sqlite3.exe)来检查生成的数据库,则它将正常工作。

4

你所需要做的是:

  1. 打开命令提示符并更改编码(chcp 65001

  2. 从当前Windows运行sqlite3.exe

  3. 更改编码(PRAGMA encoding="UTF-8";

  4. 创建正确的UTF-8脚本。


4
答案显然是错误的。请参考CL的答案或阅读文档 - klin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接