2015-04-22 6 views
0

У меня проблема при отображении таблицы DB2 с доктриной 2. Приложение существует в течение длительного времени, и по какой-то странной причине перед некоторыми именами столбцов добавлен специальный символ «£».Doctrine 2 - IBM DB2

Ex: £ ADRB1

При проверке документации, это appreared, что это то, что доктрина не очень нравится. Кстати, подключение осуществляется через драйвер ODBC:/который я не могу изменить.

Entity колонка настраивается таким образом:

/** 
* @ORM\Column(name = "`£ADRB1`", type="string", length=38, options={"default":""}) 
*/ 
protected $ADRB1; 

Ошибка является

SQLSTATE [HY090]: Недопустимая строка или буфер длина: 0 [IBM] [System я ODBC Access Driver] Недопустимая строка или длины буфера. (SQLPrepare [0] в /patched-php-src-5.5.7/php-5.5.7/ext/pdo_odbc/odbc_driver.c:206)

При попытке принести результат простой QueryBuilder.

Есть ли возможность уметь работать с Doctrine 2?

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

+0

Можете ли вы выполнить запрос с помощью другого метода, кроме Doctrine2, чтобы проверить утверждение CRPence о том, что эта проблема не связана с Doctrine? – lxg

ответ

1

Я ничего не знаю о Doctrine2, но если источник проблемы имеет какое-либо отношение к имени столбца [, который кажется хотя бы несколько слабым, если ошибка не подразумевает ничего о имени столбца], тогда, вероятно, проблема заключается в том, связанные с именем столбца [в том, что, предположительно, IBM i как сервер], имеющим первый символ, определенный с использованием кодовой точки EBCDIC 0x5B.

Хотя это EBCDIC код точки x'5B»справедливо представлять вариантзнак доллара символ в некоторых кодовых страницах [действительное, но обескуражен характер, так же, как @; см.: Using @ on Variable Names], Знак фунта стерлингов символ [кодовая точка 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].

p.s.Тег DB2i определен в вики как DB2 for IBM i, а тег DB2 определен в вики как семейство DB2, но тег ibm-db2 не имеет определения https://stackoverflow.com/tags/ibm-db2/info, поэтому, если на сервере находится IBM i с DB2 for i в качестве базы данных, то, возможно, DB2i является лучшим [или дополнительным] выбором для пометки этого раздела.?

+0

FWiW, если имя столбца является потенциальной проблемой, SQL может использоваться для CREATE VIEW на сервере, чтобы явно указывать столбцы из SELECT, каждый из которых без символов символов. Предположительно, если этот VIEW можно получить без ошибок, но не с ТАБЛИЦЕЙ, то это дает больше уверенности в том, что имя столбца является источником проблемы. – CRPence

Смежные вопросы