POSTGRES外语

时间:2013-04-09 11:34:26

标签: postgresql

我在将“ó,č,ĕ,ř”字符等外来字符直接插入数据库时​​遇到问题。即使我的PHP前端也不工作,以确保没有转换或其他编码。所以我直接使用登录的psql,这是我的设置:

server_encoding
-----------------
UTF8
(1 row)

client_encoding
-----------------
UTF8
(1 row)

数据库是:

   Name    |  Owner   | Encoding |   Collate   |    Ctype    |  
   my_db   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

所以我想应该没有问题。

我创造了这个:

CREATE TABLE test (a text);

现在我想插入一些文字

INSERT INTO TEST (a) ('ó');

还有一条消息:

ERROR:  invalid byte sequence for encoding "UTF8": 0xf327293b

有人可以帮我吗?看起来它忽略了我的输入编码,或者我真的不知道。

编辑:

我的终端配置

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

EDIT2:

my_db=# \encoding
UTF8

EDIT3:文件中的psql

档案

file -bi test
text/plain; charset=utf-8

执行

ERROR:  syntax error at or near "'Ăł'"
LINE 1: INSERT INTO tes (a) ('Ăł');

EDIT4:

set client_encoding='latin1';

这适用于psql,但我需要它与utf8一起使用。我知道我可能每次都使用mysql数据库进行此设置,它就像一个魅力。

我的jdbc驱动程序需要它是UTF8。

EDIT5:

以下是我在这里做的事:click me

在它存储之前我可以看到它 - 所以php工作正常 - 但是当我从DB读取它时我看不到它。多数民众赞成因为我更接近数据库进入psql看看发生了什么。看起来可能是服务器问题。是否可能服务器无法处理该字符?

EDIT6:

Tomcat配置

 -Dfile.encoding=UTF8

URI编码也设置为UTF8。那可能是哪个问题? :(

3 个答案:

答案 0 :(得分:2)

如果您的shell采用latin1编码,就像评论中显示的那样,这将解决它:

set client_encoding = 'latin1';

如果您不想更改客户端的系统编码,可以更改postgresql.conf

中的默认值
client_encoding = latin1

或者更改PHP的默认字符编码:

default_charset = "utf-8";

也可以在Apache或您正在使用的任何http服务器上进行配置:

AddDefaultCharset UTF-8

答案 1 :(得分:1)

只是另一个调试测试(我仍然认为它是终端的东西):你能在UTF-8编码文件中编写insert语句并尝试从文件中运行命令吗?例如:

psql my_db -U postgres -f <utf8-encoded-file>

如果这样可以正常工作,那么它会以某种方式回到终端......

答案 2 :(得分:1)

根据您使用PuTTY的评论,默认为latin-1。您需要配置PuTTY以使用UTF-8。除非您的PuTTY编码与环境声称的编码匹配,否则设置服务器区域设置将无济于事。

打开PuTTy。在“窗口设置”标题下,选择“转换”子标题。将“远程字符集”设置为“utf-8”。在“字体”子选项卡中,确保使用具有合理Unicode覆盖范围的字体。然后,在“会话”菜单中,在“已保存的设置”文本输入框中键入名称,然后键入“保存”以将设置另存为配置文件。您可以通过选择它并设置保存来覆盖“默认设置”配置文件,但这将影响所有将来的连接和新配置文件,因此如果您使用非utf-8的其他服务器,可能会造成混淆。

(这些说明基于我在Fedora 18上的PuTTY;在最近的Windows版本中,UI细节可能存在一些差异。如果有疑问,请搜索如何设置PuTTY以使用utf-8。)