问题描述
我想在同一列中存储多种语言。首先,我正在创建数据库和表。
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。