我已经在 Windows cmd 提示符下的 PSQL 和编码方面苦苦挣扎了一段时间,虽然我设法让它在 4 个不同的数据库上工作大约 4 次,但似乎每次问题都是相同的,但解决方案不同。我已经无法应对了。
到目前为止我已经尝试过:
CREATE DATABASE test WITH OWNER admin
TEMPLATE = TEMPLATE0
LC_COLLATE = 'fr-FR-x-icu'
LC_CTYPE = 'fr-FR-x-icu'
ENCODING = 'UTF8' OR 'WIN1252'
我玩过
SET client_encoding = 'UTF8' or 'WIN1252'
,它工作过几次。在创建表之前,我已将其放入我的 create_tables.sql
文件中,并且在 SQL Shell 中填充表后也使用了它。
我什至在 runpsql 脚本中添加了
cmd.exe /c chcp 1252
。
我还更改了 Windows 的“非 Unicode 程序的当前语言”,希望它能改变一些东西。
通常这些解决方案的变体都可以工作,但对于我当前正在处理的数据库,它只是拒绝做出任何更改,我已经没有想法了。
是否有我遗漏的东西,或者我应该放弃 Windows 命令提示符并尝试 WSL?
我正在讨论插入表中的数据的编码。编码是UTF-8,数据库也是用
UTF8
编码创建的。
以下是我发送查询后得到的结果:
Savoné
或 Concâmbre
根据您显示的数据,问题出在您的
client_encoding
。您必须将其设置为 UTF8
,以便 PostgreSQL 将数据解释为 UTF-8。设置客户端编码有多种方法:
运行SQL语句
SET client_encoding = 'UTF8';
或同等程度
SET NAMES 'UTF8';
将环境变量
PGCLIENTENCODING
设置为UTF8
在
psql
中,可以设置
\encoding UTF8
这将确保数据库中的数据正确。
还有一个特定于 Windows 的方面;请参阅文档:
psql 被构建为“控制台应用程序”。由于 Windows 控制台窗口使用与系统其他部分不同的编码,因此在 psql 中使用 8 位字符时必须特别小心。如果 psql 检测到有问题的控制台代码页,它会在启动时向您发出警告。要更改控制台代码页,需要做两件事:
输入
设置代码页。 (1252 是适合德语的代码页;将其替换为您的值。)如果您使用 Cygwin,您可以将此命令放入cmd.exe /c chcp 1252
。/etc/profile
将控制台字体设置为
,因为光栅字体不适用于 ANSI 代码页。Lucida Console
这与数据库中存储的内容无关,但它将确保数据在 Windows 命令行上正确显示。