gpt4 book ai didi

php - PostgreSQL + PHP + UTF8 = 编码的无效字节序列

转载 作者:可可西里 更新时间:2023-10-31 22:49:09 38 4
gpt4 key购买 nike

我正在将数据库从 mysql 迁移到 postgresql。 mysql 数据库的默认排序规则是 UTF8,postgres 也使用 UTF8,我使用 pg_escape_string() 对数据进行编码。但是,无论出于何种原因,我遇到了一些关于错误编码的时髦错误:

pg_query() [function.pg-query]:查询失败:错误:编码“UTF8”的无效字节序列:0xeb7374
提示:如果字节序列与服务器预期的编码不匹配,也会发生此错误,服务器由“客户端”控制

我一直在四处寻找解决办法,并注意到 php 正在做一些奇怪的事情;如果字符串中只有 ascii 字符(例如“hello”),则编码为 ASCII。如果字符串包含任何非 ascii 字符,则表示编码为 UTF8(例如“Hëllo”)。

当我在已经是 UTF8 的字符串上使用 utf8_encode() 时,它会杀死特殊字符并使它们全部困惑,所以..我该怎么做才能让它工作?

(现在挂起的确切字符是“�”,但我不只是搜索/替换,而是想找到一个更好的解决方案,这样这种问题就不会再发生了)

最佳答案

很有可能,您的 MySQL 数据库中的数据不是 UTF8。这是一个很常见的场景。 MySQL 至少过去根本不对数据进行任何适当的验证,因此只要您的客户声称它是 UTF8,它就会接受您作为 UTF8 扔给它的任何东西。他们现在可能已经解决了这个问题(或者没有,我不知道他们是否认为这是一个问题),但是您可能已经在数据库中有错误编码的数据。当然,PostgreSQL 在加载时会执行完整验证,因此它可能会失败。

您可能希望通过 iconv 之类的东西提供数据,可以将其设置为忽略未知字符,或将它们转换为“最佳猜测”。

关于php - PostgreSQL + PHP + UTF8 = 编码的无效字节序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1677595/

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