首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >POSTGRES外语

POSTGRES外语
EN

Stack Overflow用户
提问于 2013-04-09 19:34:26
回答 3查看 2K关注 0票数 0

在数据库中直接插入像"ó,č,ĕ,ř“这样的外国字符时,我遇到了问题。不工作,甚至与我的php前端,以确保没有转换或其他编码。所以我直接使用了登录的psql,下面是我的设置:

代码语言:javascript
运行
复制
server_encoding
-----------------
UTF8
(1 row)

代码语言:javascript
运行
复制
client_encoding
-----------------
UTF8
(1 row)

数据库是:

代码语言:javascript
运行
复制
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |  
   my_db   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

所以我想应该没有问题。

我创建了这个:

代码语言:javascript
运行
复制
CREATE TABLE test (a text);

现在我想插入一些文本

代码语言:javascript
运行
复制
INSERT INTO TEST (a) ('ó');

这里有一条信息:

代码语言:javascript
运行
复制
ERROR:  invalid byte sequence for encoding "UTF8": 0xf327293b

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

编辑:

我的终端配置

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
my_db=# \encoding
UTF8

EDIT3:来自文件的psql

文件

代码语言:javascript
运行
复制
file -bi test
text/plain; charset=utf-8

执行

代码语言:javascript
运行
复制
ERROR:  syntax error at or near "'Ăł'"
LINE 1: INSERT INTO tes (a) ('Ăł');

EDIT4:

代码语言:javascript
运行
复制
set client_encoding='latin1';

这在psql中工作,但我需要它与utf8一起工作。我知道这是可能的,我每次都在mysql数据库中使用这个设置,它的效果非常好。

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

EDIT5:

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

在存储之前,我可以看到它-所以php工作得很好-但在那之后,当我从数据库中读取它时,我看不到它。这是因为我更接近于将DB移到psql中,以查看发生了什么。看起来可能是服务器问题。有没有可能服务器不能处理这些字符?

EDIT6:

Tomcat配置

代码语言:javascript
运行
复制
 -Dfile.encoding=UTF8

URI编码也设置为UTF8。问题出在哪里?

EN

回答 3

Stack Overflow用户

发布于 2013-04-09 19:51:52

如果您的shell是latin1编码的,就像注释中显示的那样,这将修复它:

代码语言:javascript
运行
复制
set client_encoding = 'latin1';

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

代码语言:javascript
运行
复制
client_encoding = latin1

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

代码语言:javascript
运行
复制
default_charset = "utf-8";

也可以在Apache或您正在使用的任何http服务器、config:

代码语言:javascript
运行
复制
AddDefaultCharset UTF-8
票数 2
EN

Stack Overflow用户

发布于 2013-04-09 19:53:43

这只是另一个调试测试(我仍然认为这是一个终端问题):您是否可以在UTF-8编码文件中编写insert语句,并尝试从该文件运行命令?例如:

代码语言:javascript
运行
复制
psql my_db -U postgres -f <utf8-encoded-file>

如果这个运行良好,那么它就会以某种方式返回到终端...

票数 1
EN

Stack Overflow用户

发布于 2013-04-09 21:03:44

根据您正在使用的PuTTY的注释,它默认为拉丁语-1。您需要将PuTTY配置为使用UTF-8。只设置服务器区域设置不会有任何好处,除非您的PuTTY编码与环境声明的编码相匹配。

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

(这些说明基于我在Fedora18上的PuTTY;在最近的Windows版本中,UI细节可能会有所不同。如果有疑问,请搜索如何将PuTTY设置为使用utf-8。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15900759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档