无法在Postgres中插入德语字符

时间:2012-07-11 09:32:35

标签: postgresql text encoding utf-8

我使用UTF8作为Postgres 8.4.11数据库的编码:

CREATE DATABASE test
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = mydata
       LC_COLLATE = 'de_DE.UTF-8'
       LC_CTYPE = 'de_DE.UTF-8'
       CONNECTION LIMIT = -1;

ALTER DATABASE test SET default_tablespace='mydata';
ALTER DATABASE test SET temp_tablespaces=mydata;

\l

的输出
 test | postgres  | UTF8     | de_DE.UTF-8 | de_DE.UTF-8 |

当我尝试插入德语字符时:

create table x(a text);

insert into x values('ä,ß,ö');
ERROR:  invalid byte sequence for encoding "UTF8": 0xe42cdf
HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

我正在使用puTTY进行连接。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

关键元素是client_encoding - 服务器期望从客户端获得的编码。它必须匹配实际发送的内容。你对show client_encoding有什么看法?是UNICODE吗?

在手册的Automatic Character Set Conversion Between Server and Client章节中阅读更多内容。

如果您使用 psql 作为客户端,则可以使用client_encoding设置\encoding。检查本地系统用户的编码(在shell中的Linux类型locale上)并在psql中设置匹配的client_encoding。如果在系统上使用与PostgreSQL服务器encoding相同的区域设置,则可以避免此类复杂情况。

如果您使用 puTTY (在Windows上),请务必相应地设置其“翻译”。看一下设置:窗口 - 翻译。必须与client_encoding匹配。您可以在正在运行的会话中单击鼠标右键,然后选择更改设置。您还可以使用已保存的会话保存这些设置。

我在Windows XP系统上有“UTF-8”用于puTTY,encodingclient_encoding都设置为UNICODE(= UTF8在Postgres中),适用于我