Семантика CHAR и ORA-01461

Я поддерживаю приложение, управляемое PHP, с серверной частью Oracle (функции OCI8). Приложение разработано с помощью Oracle 10g XE и развернуто на любой версии, которой владеет заказчик.

Приложение обрабатывает однобайтовый текст (ISO-8859-15), и у меня никогда не было проблем при разработке против Western Европейская редакция Oracle XE. Однако я недавно установил версию Universal , и у меня возникают проблемы при вставке больших строк с символами, отличными от ASCII. Эта версия устанавливает NLS_CHARACTERSET = AL32UTF8 ; поскольку в моем приложении используется WE8ISO8859P15 , Oracle молча преобразует мои входные данные из ISO-8859-15 в UTF-8 (что нормально). ORA-01461: sólo puede enlazar un valor LONG para insertarlo en una columna LONG

Это та же ошибка, которую я получаю, когда пытаюсь вставить строку 4001 char. Этого не произойдет, если я вставлю xxx ... вместо €€€ , и этого не произойдет, если я сохраню свой сценарий как UTF-8 и подключусь как таковой:

<?php
$connection = oci_connect(DB_USER, DB_PASS, DB_CONN_STRING, 'AL32UTF8');

[ Обновление: Мой тест был некорректным. Использование UTF-8 не позволяет избежать ORA-01461]

Как я могу преодолеть эту проблему? Я не контролирую параметр базы данных NLS_CHARACTERSET , и переключение моего приложения на UTF-8 может вызвать другие проблемы (почти все наши клиенты имеют однобайтовые базы данных).

7
задан Álvaro González 8 March 2011 в 10:08
поделиться