在psql中打印不同的语言字符

Printing different language characters in psql

我想在同一列中存储多种语言。首先,我正在创建数据库和表。

CREATE DATABASE dbname ENCODING 'UTF8'

我正在成功保存数据,但是当我想用 SELECT 查询打印它时,我在使用 psql 时遇到了这个错误。

ERROR:  character with byte sequence 0xd9 0x84 in encoding "UTF8" has no equivalent in encoding "WIN1254"

所以 WIN1254 是土耳其语,它有不同的字符,如 ç、ş、ü...但是只有当我排除阿拉伯语时我才不会收到此错误,所以问题不是土耳其语而是阿拉伯语。我该如何解决这个问题?也许我应该在创建数据库时做点什么。另外,在我打印时,它没有成功打印土耳其语字符,只是输入了错误的字符。

如果您的应用程序或客户端应显示不同语言的字符,则它们必须使用定义了这些字符的客户端编码。

阿拉伯字符在WIN1254中没有定义,所以你必须使用不同的编码。通常,人们会为此使用 UTF-8 或 UTF-16 编码之一。由于 PostgreSQL 不支持 UTF-16,UTF-8 是可行的方法。

由于您使用的是 Windows,事情可能会更复杂,因为命令行不支持 UTF-8。

psql 会话中,将客户端编码设置为与服务器编码匹配:

SET client_encoding TO 'UTF8';

像这样找到server_encoding:

SHOW server_encoding;

例如:

psql <whatever>
=> SELECT * FROM table_foo;
ERROR:  character with byte sequence 0xef 0xbf 0xbd in encoding "UTF8" has no equivalent in encoding "LATIN9"
=> SHOW server_encoding;
 server_encoding 
-----------------
 UTF8
(1 row)
=> SET client_encoding TO 'UTF8';
SET
=> select * from table_foo;
-- Now OK

另请参见:

PostgreSQL:文档:23.3。字符集支持:https://www.postgresql.org/docs/current/multibyte.html