Доктрина 2 — IBM DB2

У меня проблема при отображении таблицы 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?

Большое спасибо !

0

Решение

Я ничего не знаю о 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 является лучшим [или дополнительным] выбором для пометки этой темы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]