在数据库中直接插入像"ó,č,ĕ,ř“这样的外国字符时,我遇到了问题。不工作,甚至与我的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。问题出在哪里?
发布于 2013-04-09 19:51:52
如果您的shell是latin1编码的,就像注释中显示的那样,这将修复它:
set client_encoding = 'latin1';
如果您不想更改客户端的系统编码,可以在postgresql.conf
中更改默认值
client_encoding = latin1
或者更改PHP的默认字符编码:
default_charset = "utf-8";
也可以在Apache或您正在使用的任何http服务器、config:
AddDefaultCharset UTF-8
发布于 2013-04-09 19:53:43
这只是另一个调试测试(我仍然认为这是一个终端问题):您是否可以在UTF-8编码文件中编写insert语句,并尝试从该文件运行命令?例如:
psql my_db -U postgres -f <utf8-encoded-file>
如果这个运行良好,那么它就会以某种方式返回到终端...
发布于 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。)
https://stackoverflow.com/questions/15900759
复制相似问题