2

我有一个 sql statemwent,其中包含一个 unicode 特定符号。unicode 符号是波兰语 Przesunięcie 中的 ę。请看下面的 SQL INSERT 语句:

INSERT INTO res_bundle_props (res_bundle_id, value, name) 
VALUES(2, 'Przesunięcie przystanku', 'category.test');

我使用 Postgres 数据库。我可以通过哪种方式插入带有 unicode 字母的波兰语单词?

4

2 回答 2

0

查找服务器和客户端编码是什么:

show server_encoding;
 server_encoding 
-----------------
 UTF8

show client_encoding;
 client_encoding 
-----------------
 UTF8

然后将客户端设置为与服务器相同的编码:

set client_encoding = 'UTF8';
SET
于 2013-07-01T10:34:46.380 回答
0

不需要特殊语法,只要:

  • server_encoding包括那些字符(如果是的utf-8话);
  • 你的client_encoding包括那些字符;
  • client_encoding正确匹配您实际发送的字节的编码

后者是经常绊倒人们的人。他们认为他们可以client_encoding用一个SET client_encoding声明来改变,它会做某种神奇的转换。事实并非如此。client_encoding告诉 PostgreSQL “这是您将从客户端接收的数据的编码,以及客户端期望从您接收的编码”。

设置client_encodingutf-8不会使客户端实际发送 UTF-8。这取决于客户。也不必发送utf-8;该字符串也可以表示为iso-8859-2iso-8859-4以及iso-8859-10其他编码。

关键是你告诉服务器你发送的数据的编码。碰巧,在提到的所有三种编码中,字符串都是相同的,ę编码为0xae... 但在 utf-8 中是两个字节0xc4 0x99。如果您将 utf-8 发送到服务器并告诉它这是iso-8859-2服务器无法告诉您错误,并将其解释为Äiso-8859-2。

所以...实际上,这取决于系统的默认编码、您从中读取数据的任何文件/流的编码等。您有两个选择:

  • client_encoding为您正在使用的数据和系统的默认显示区域设置适当的设置。这对于简单的情况是最简单的,但在处理输入或输出中的多种不同编码时更难。

  • 设置client_encoding为 utf-8(或与 相同server_encoding),并确保client_encoding在发送之前始终将所有输入数据转换为设置为的编码。您还必须将您从 Pg 收到的所有数据转换回来。

于 2013-07-01T11:09:15.647 回答