4

我对 sqlite 及其文本编码有一个小问题。我从 sqlite 处理 UTF-8 编码的文档中读取,或者我可以通过执行命令 PRAGMA encoding = "UTF-8"; 来使用它。等等。数据库需要存储波兰语文本。该数据库稍后将与 Qt 一起使用。我有一个包含两个命令的脚本: CREATE TABLE ... 和 INSERT INTO ... 该文件以 UTF-8 编码。但是,当我使用命令行时:sqlite3 myname.db < the_file.sql,我可以创建数据库和表,但所有波兰语特定字符,如 ą、ć、ź、Ż 等都会自动转换为更简单的 ANSI 等效字符:a,c,z,Z等。我认为这将是命令行的问题。所以我下载了 SQLite Manager 2009,当我复制/粘贴整个脚本在 SQLite Manager 中执行它时,我注意到效果是一样的。在复制/粘贴过程中会自动转换字符。SQLite 是否仅限于使用 ANSI 字符?

4

2 回答 2

4

如果您的设置有任何问题,那肯定不是 SQLite。

几个简单的测试:

Linux:

$ cat > test.sql <<EOF
DROP TABLE IF EXISTS t;
CREATE TABLE t (str varchar(20));
INSERT INTO  t (str) VALUES ("ą, ć, ź, Ż");
SELECT * FROM t;
EOF

$ file test.sql
test.sql: UTF-8 Unicode text

$ sqlite3 test.db < test.sql
ą, ć, ź, Ż

因此,它按照医生的规定起作用。

视窗:

使用test.sql同上。如果您需要重新创建它,请复制并粘贴以下文本:

DROP TABLE IF EXISTS t;
CREATE TABLE t (str varchar(20));
INSERT INTO  t (str) VALUES ("ą, ć, ź, Ż");
SELECT * FROM t;

进入 Notepad++ 并使用 Encoding -> Encode in UTF-8 without BOM另存为文件。

sqlite3 test.db < test.sql
─Е, ─З, ┼║, ┼╗

这听起来很糟糕。但是,这是有缺陷的 Windows 控制台!将输出保存到文件中:

sqlite3 test.db < test.sql > out.txt

out.txt在 Notepad++ 中打开- 看起来很棒:ą, ć, ź, Ż

编辑:它也适用于 Windows 控制台,如果您使用chcp 65001

chcp 65001
sqlite3 test.db < test.sql
ą, ć, ź, Ż

QED。

于 2012-11-19T11:33:20.577 回答
-2

尝试替换您的 sqlite3.exe 文件。有时它会损坏并且只能输出格式错误的字符(当它们应该是 UTF-8 时是 ANSI 字符)。

再次从以下位置下载最新版本的新副本: https ://www.sqlite.org/download.html

于 2018-10-23T16:52:43.963 回答