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