У меня проблема при отображении таблицы DB2 с Doctrine 2.
Приложение существует в течение долгого времени, и по странной причине перед именами некоторых столбцов добавлен специальный символ «£».
Пример: £ ADRB1
При проверке документации выяснилось, что доктрине это не очень нравится.
Кстати, соединение осуществляется через драйвер ODBC: / который я не могу изменить.
Столбец сущности настраивается следующим образом:
/**
* @ORM\Column(name = "`£ADRB1`", type="string", length=38, options={"default":""})
*/
protected $ADRB1;
Ошибка
SQLSTATE [HY090]: Неверная длина строки или буфера: 0 [IBM] [Драйвер ODBC для System i Access] Неверная длина строки или буфера. (SQLPrepare [0] в /patched-php-src-5.5.7/php-5.5.7/ext/pdo_odbc/odbc_driver.c:206)
При попытке получить результат с помощью простого queryBuilder.
Есть ли возможность заставить его работать с Doctrine 2?
Большое спасибо !
Я ничего не знаю о Doctrine2, но если причина проблемы связана с именем столбца [который кажется по крайней мере несколько незначительным, учитывая, что ошибка ничего не говорит о названии столбца], то, вероятно, проблема связана с именем столбца [в котором, предположительно, IBM i в качестве сервера], имеющего первый символ, определенный с использованием кодовой точки EBCDIC 0x5B.
Хотя эта кодовая точка EBCDIC x’5B ‘является действительной для представления вариант Знак доллара символ в некоторых кодовых страницах [допустимый, но обескураженный символ, такой же, как @; увидеть: Использование @ в именах переменных], то Знак фунта стерлингов символ [кодовая точка ASCII 0xA3], отправленный клиентом ASCII, может не транслироваться в кодовую точку EBCDIC x’5B ‘. Результат зависит от того, как настроен сервер для кодовой страницы, и вполне вероятно, что символ будет преобразован в кодовую точку EBCDIC 0xB1; кодовая точка, которая вряд ли представляет действительный символ для идентификатора SQL, такого как имя столбца.
Так что, если клиент может ссылаться на имя столбца, указав первый символ в качестве $
характер, а не как £
символ, затем, когда происходит ожидаемое \ правильное преобразование символа из ASCII в EBCDIC, сервер правильно увидит имя столбца как ожидаемое имя; то есть будет в результате, смотрите символы $ ADRB1 в EBCDIC [hex: 5BC1C4D9C2F1] как переведенные из символов ASCII $ ADRB1 [hex: 2441445231], а не вероятный \ нежелательный результат вместо этого, когда сервер в результате увидит символы £ ADRB1 в EBCDIC [hex: B1C1C4D9C2F1] в переводе с символов ASCII £ ADRB1 [hex: A341445231].
постскриптум Тег DB2i определяется в вики как DB2 для IBM i и тег DB2 определен в вики как Семейство DB2, но тэг ibm-db2 не имеет определения https://stackoverflow.com/tags/ibm-db2/info, так что если сервером является IBM i с DB2 for i в качестве базы данных, то, возможно, DB2i является лучшим [или дополнительным] выбором для пометки этой темы.
Других решений пока нет …