gpt4 book ai didi

php - PostgreSQL 中的 UTF-8 问题

转载 作者:行者123 更新时间:2023-11-29 14:23:36 26 4
gpt4 key购买 nike

我的数据库是 UTF-8 (PostgreSQL)。我将“TESTµTEST”保存到数据库中,没问题。但是当我从数据库中选择这个值时,我看到了“TESTµTEST”。

此外,当我发出请求 select * from tbl where f='TESTµTEST' 时,我得到了这个错误:

ERROR: invalid byte sequence for encoding "UTF8": 0xb5.

你能给我一些解决方案吗?

最佳答案

该错误表明您正在尝试将 latin-1 文本解码为 utf-8。您在 PHP 中的 client_encoding 设置很可能与您实际发送的数据的编码不匹配。

字符串“TESTµTEST”是通过将数据从 Unicode 编码为 utf-8 字节序列,然后将其解码为 latin-1 生成的。你可以在 psql 中看到这个:

regress=# select convert_from(convert_to('TESTµTEST','utf-8'),'latin-1');
convert_from
--------------
TESTµTEST

如果 PostgreSQL 数据库是 utf-8 如果 client_encoding 已正确设置为 latin-1。如果 client_encoding 被错误地设置为 utf-8 并且您发送了 latin-1 编码的数据,PostgreSQL 将拒绝接受它并显示消息:

invalid byte sequence for encoding "UTF8": 0xb5

...当您运行您显示的 SELECT 时会发生什么。所以 - 我会说您的客户端设置为 client_encoding = 'utf-8' 但您的 PHP 脚本实际上正在发送 latin-1 数据。我希望这是因为,正如@dezso 所说,您正在使用使用 latin-1 编码的文本编辑器来编辑 PHP 脚本。

要找出 PHP 使用的编码,请使用 PHP 数据库连接运行 SHOW client_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 编码的文件。

关于php - PostgreSQL 中的 UTF-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11949809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com