在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是土耳其语,具有ç,ş,ü等不同字符。但是,只有当我排除阿拉伯语时,我才不会出现此错误,因此问题不是土耳其语,而是阿拉伯语。我该如何解决?也许我应该在创建数据库时做些事情。另外,在我打印时,它不会成功打印土耳其语字符,只是放错了字符。

解决方法

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

,

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

在WIN1254中未定义阿拉伯字符,因此您必须使用其他编码。通常,将为此使用UTF-8或UTF-16编码之一。由于PostgreSQL不支持UTF-16,因此要使用UTF-8。

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