使用PHP时,没有从firebird数据库接收正确的数据
作者:互联网
我有一些非常奇怪的情况.我正在对firebird数据库进行查询,并且与PHP中的结果不匹配.在DB中,结果很好,但是当涉及到PHP时,会有不同的值.
查询:
SELECT LIST(t."ID", ',') ID,t."Date", LIST(n."Name",',') Name
FROM "Tests" t
LEFT JOIN "Names of tests" n ON t."Name ID" = n."ID"
WHERE t."Locked" = 0
GROUP BY t."Date"
ORDER BY t."Date" DESC
DB中的结果:
ID = 546,552日期= 23.10.2015姓名=Математика(тест),География(тест)
PHP中的结果:
06001
当使用ibase_connect()连接到DB时,我使用“UTF-8”编码,数据库编码为WIN1251.
解决方法:
结果类型LIST()
是blob,而不是CHAR或VARCHAR.我自己不使用PHP,但我相信PHP的Firebird / Interbase驱动程序要求您明确请求blob.
您在ID和Name中看到的值是可用于请求blob的blob id.
您有两种选择:
>使用这些blob id请求blob值,请参阅ibase_blob_open
和ibase_blob_get
(afaik,您需要自己进行正确的字节到字符转换)
>将值转换为VARCHAR(例如CAST(LIST(t.“ID”,’,’)AS VARCHAR(2048))AS ID)
第二个选项的缺点是,如果你可以有很长的结果,那么你还需要转换为长VARCHAR,否则会出现截断错误;不幸的是,varchars限制为32K-2字节(UTF8为8191个字符),整行为64K字节.
标签:php,encoding,utf-8,firebird 来源: https://codeday.me/bug/20190628/1314010.html