SQLite将所有unicode字符转换为ANSI

时间:2012-11-15 19:52:31

标签: sqlite

我对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字符?

2 个答案:

答案 0 :(得分: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保存为文件 - &gt; 在没有BOM的情况下以UTF-8编码

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

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

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

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

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

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

QED。

答案 1 :(得分:-2)

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

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