【问题标题】:Can not insert German characters in Postgres无法在 Postgres 中插入德语字符
【发布时间】:2012-07-11 09:32:35
【问题描述】:

我使用 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 进行连接。有什么想法吗?

【问题讨论】:

    标签: postgresql text encoding utf-8


    【解决方案1】:

    关键元素是client_encoding - 服务器期望您的客户端提供的编码。它必须与实际发送的内容相匹配。 show client_encoding 能得到什么?是UNICODE吗?

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

    如果您使用 psql 作为客户端,您可以将client_encoding 设置为\encoding。检查本地系统用户的编码(在 Linux 上,在 shell 中键入 locale)并在 psql 中设置匹配的 client_encoding。如果您在系统上使用与在 PostgreSQL 服务器上使用 encoding 相同的语言环境,则可以避免这种复杂情况。

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

    【讨论】:

    • test=# show client_encoding; client_encoding ----------------- UTF8 (1 row)
    • 'UTF8' 应该不错,UNICODE 在这里只是一个别名。现在您必须确保UTF8 与您的客户匹配。我怀疑你必须适应另一种编码。
    • @baboso: "0xe42cdf" -- 这看起来就像您正在使用 latin1 编码通过 putty 输入字符。将您的 Linux 环境设置为“de_DE.ISO-8859-1”或将 PuTTY 配置为发送 UTF-8 字符。
    • running "C:\Program Files\PSQL\bin\psql.exe" \encoding UTF8 正在询问用户UTF8 的密码...当系统没有安装postgreqsl 时如何更改客户端编码?但正在访问远程数据库
    • @PresleyDias:在this manual page 中查找encoding,尤其是“Windows 用户须知”一章。
    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2017-07-02
    • 2020-05-14
    • 1970-01-01
    • 2018-03-04
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多