我使用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进行连接。有什么想法吗?
答案 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,encoding
和client_encoding
都设置为UNICODE
(= UTF8
在Postgres中),适用于我