我在将“ó,č,ĕ,ř”字符等外来字符直接插入数据库时遇到问题。即使我的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。那可能是哪个问题? :(
答案 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。)