我收到错误消息:“无效的字节序列用于编码”UTF8“:0x9f
好的,现在我知道某个地方我的php应用程序正在尝试使用该0x9f字符进行查询。 但我不知道在哪里。
我检查了postgresql.conf但是我找不到类似“log_on_error”的内容。只有log_statement参数会导致postgres记录所有选择或只记录所有查询。 但我想看到的是:
ERROR: "Invalid byte sequence for encoding "UTF8": 0x9f
QUERY: SELECT * FROM blabla WHERE field1='blabla0x9f'
在这种情况下,我将能够看到哪个查询导致了这个问题。所以我知道要检查哪个php脚本。
这可以用postgres吗?我的psql版本是8.3.9。
答案 0 :(得分:2)
您正在寻找log_min_error_statement。
但是,在将文本解析为语句之前,解析器中会出现“无效字节序列”。所以没有办法记录它而不冒险以奇怪的编码记录它并使其无用或危险。
但可以推测您的PHP应用程序检测到错误?如果没有,你没有在那里检查足够的返回代码;)
答案 1 :(得分:1)
只是要清楚,因为我不认为Magnus正在通过(虽然他的答案非常好):如果你以UTF-8读取文件,但它是用latin1编码的它并没有神奇地转换为utf8。您只能使用文件编码中的文件,无论是将文件提交到数据库,还是以不同的编码重新编码。你有三个选择(我可以使用):
当然,最正确的方式是第一种方式。
使用php转换文件。有关详细信息,请阅读docs on recode。
使用client_encoding
更改postgresql上的set client_encoding = encoding
。您可以找到valid encoding in the docs
将其发送至postgresql进行转换 read the docs on PostgresSQL's convert()