QuestDB通过PDO查询返回乱码错误值 PostgreSQL查询正常问题求助
问题原因
你遇到的是QuestDB 6.0.2版本PostgreSQL通信协议实现的已知bug:多列结果返回时,数值、时间类型字段的二进制编码对齐规则和PHP PDO的pgsql驱动预期不匹配,导致驱动解析字段内容时读取偏移错误,才会出现数值不对、乱码的情况;单字段查询时对齐规则刚好符合驱动预期,所以返回正常。
解决方案
1. 优先升级QuestDB版本
该兼容性bug已经在6.0.4及之后的稳定版本修复,直接升级QuestDB到最新官方稳定版即可完全解决问题,无需修改现有业务代码,是最稳妥的方案,也能避免旧版本的其他已知问题,更适合数据迁移场景使用。
2. 临时兼容方案(无法升级版本时使用)
如果暂时没有升级条件,可以用以下任意一种方法临时规避问题:
- 配置PDO属性强制所有返回值转字符串:在初始化PDO后添加代码
让pdo驱动不解析二进制类型,所有字段都按字符串读取,可解决编码偏移问题。$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - 查询时显式将非字符串类型转为字符串:改写SQL语句,把数值、时间字段都转成字符串类型返回,例如:
SELECT personnel_id::VARCHAR, ts::VARCHAR, date::VARCHAR, name, value::VARCHAR FROM test_table - 改用QuestDB的HTTP REST接口查询:直接向QuestDB默认9000端口的
/exec接口发送查询请求,返回JSON格式结果,不存在通信协议兼容性问题。
内容的提问来源于stack exchange,提问作者HC_
相关产品推荐
相关产品推荐

