У меня очень странная ситуация. Я делаю запрос к базе данных Firebird и есть несоответствие с результатом в PHP. В БД результат просто отличный, но когда дело доходит до 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
Результат в БД:
ID = 546,552 Дата = 23.10.2015 Имя = Математика (тест), География (тест)
Результат в PHP:
ID => 0x0000000200000000, Date => 2015-10-23, Name => 0x0000000500000000
Я использую кодировку «UTF-8» при подключении к БД с помощью ibase_connect (), кодировка базы данных — WIN1251.
Тип результата LIST()
это капля, а не CHAR
или же VARCHAR
, Я сам не использую PHP, но я считаю, что драйвер Firebird / Interbase для PHP требует от вас явного запроса BLOB-объекта.
Значения, которые вы видите для ID
а также Name
являются идентификаторами BLOB-объектов, которые можно использовать для запроса BLOB-объектов.
У вас есть два варианта:
ibase_blob_open
а также ibase_blob_get
(afaik, вам нужно будет сделать правильный преобразование байта в символ самостоятельно)VARCHAR
(например CAST(LIST(t."ID", ',') AS VARCHAR(2048)) AS ID
)Недостатком второго варианта является то, что если у вас могут быть действительно длинные результаты, то вам также нужно привести к длинному VARCHAR
в противном случае вы получите ошибки усечения; и, к сожалению, varchars ограничены 32K-2 байтами (8191 символ для UTF8), а строка в целом — 64K байтами.
Других решений пока нет …