Php PostgreSQL中的UTF-8问题
我的数据库是UTF-8(PostgreSQL)。我将“TESTµTEST”保存到数据库中,一切正常。但是当我从数据库中选择这个值时,我看到了“TEST” 此外,当我从tbl(其中f='TESTµTEST')请求选择*时,我得到了以下错误: 错误:编码“UTF8”的字节序列无效:0xb5Php PostgreSQL中的UTF-8问题,php,postgresql,unicode,utf-8,Php,Postgresql,Unicode,Utf 8,我的数据库是UTF-8(PostgreSQL)。我将“TESTµTEST”保存到数据库中,一切正常。但是当我从数据库中选择这个值时,我看到了“TEST” 此外,当我从tbl(其中f='TESTµTEST')请求选择*时,我得到了以下错误: 错误:编码“UTF8”的字节序列无效:0xb5 您能给我一些解决方案吗?该错误表明您试图解码拉丁语-1文本,就像它是utf-8一样。PHP中的client\u编码设置很可能与实际发送的数据编码不匹配 字符串“TEST”是通过将数据从Unicode编码为utf-
您能给我一些解决方案吗?该错误表明您试图解码拉丁语-1文本,就像它是utf-8一样。PHP中的
client\u编码设置很可能与实际发送的数据编码不匹配
字符串“TEST”是通过将数据从Unicode编码为utf-8字节序列,然后将其解码为拉丁语-1生成的。您可以在psql中看到这一点:
regress=# select convert_from(convert_to('TESTµTEST','utf-8'),'latin-1');
convert_from
--------------
TESTµTEST
如果PostgreSQL数据库是utf-8
,如果client\u encoding
正确设置为latin-1
,它将latin-1
输入转换为utf-8
。如果client\u encoding
被错误地设置为utf-8
,并且您发送latin-1
编码数据,PostgreSQL将拒绝接受该数据并显示以下消息:
invalid byte sequence for encoding "UTF8": 0xb5
。。。这就是运行显示的选择时发生的情况。所以-我想说您的客户端设置为client\u encoding='utf-8'
,但您的PHP脚本实际上正在发送latin-1
数据。我想这是因为,正如@dezso所说,您正在使用使用latin-1
编码的文本编辑器编辑PHP脚本
要找出PHP使用的编码,请使用PHP数据库连接运行SHOW client\u encoding代码>
要显示数据库编码,请运行:
SELECT d.datname, pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding"
FROM pg_database d WHERE datname = 'my_db_name_here';
哦,另一种可能是Apache(或其他什么)希望您的PHP脚本是utf-8
编码的,但实际上它们是latin-1
编码的文件。该错误表明您试图将latin-1文本解码为utf-8。PHP中的client\u编码设置很可能与实际发送的数据编码不匹配
字符串“TEST”是通过将数据从Unicode编码为utf-8字节序列,然后将其解码为拉丁语-1生成的。您可以在psql中看到这一点:
regress=# select convert_from(convert_to('TESTµTEST','utf-8'),'latin-1');
convert_from
--------------
TESTµTEST
如果PostgreSQL数据库是utf-8
,如果client\u encoding
正确设置为latin-1
,它将latin-1
输入转换为utf-8
。如果client\u encoding
被错误地设置为utf-8
,并且您发送latin-1
编码数据,PostgreSQL将拒绝接受该数据并显示以下消息:
invalid byte sequence for encoding "UTF8": 0xb5
。。。这就是运行显示的选择时发生的情况。所以-我想说您的客户端设置为client\u encoding='utf-8'
,但您的PHP脚本实际上正在发送latin-1
数据。我想这是因为,正如@dezso所说,您正在使用使用latin-1
编码的文本编辑器编辑PHP脚本
要找出PHP使用的编码,请使用PHP数据库连接运行SHOW client\u encoding代码>
要显示数据库编码,请运行:
SELECT d.datname, pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding"
FROM pg_database d WHERE datname = 'my_db_name_here';
哦,另一种可能是Apache(或其他什么)希望您的PHP脚本是utf-8
编码的,但实际上它们是latin-1
编码的文件。我在将表复制到包含相同符号的PostgreSQL 9.1中时遇到了相同的错误(来自数据库的表)。我用新的编码重新创建了数据库,但我还必须指定适当的编码
我在将表复制到包含相同符号的PostgreSQL 9.1中时遇到了相同的错误(表来自)。我用新的编码重新创建了数据库,但我还必须指定适当的编码
需要更多信息。什么编程语言和/或连接方法?显示您的代码。我使用Php和pg_connect以及pg_查询。0xB5
是“µ”的拉丁-1编码,而不是UTF-8。tbl列的编码是什么?我的提示(基于@decereé的观察)是您的Php文件(因此要插入的字符串)是拉丁-1编码。确保这些也是UTF8'd。需要更多信息。什么编程语言和/或连接方法?显示您的代码。我使用Php和pg_connect以及pg_查询。0xB5
是“µ”的拉丁-1编码,而不是UTF-8。tbl列的编码是什么?我的提示(基于@decereé的观察)是您的Php文件(因此要插入的字符串)是拉丁-1编码。确保这些也是UTF8'd。