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