Удар ORA-01461 при вставке многобайтовых символов из Perl в оракула

У меня есть Perl-скрипт, который вставляет записи из текстового файла в нашу базу данных. Всякий раз, когда запись имеет многобайтовый символ, такой как "RODR_Í_GUEZ". Я получаю ошибку ORA-01461, однако я не нахожусь рядом с 4000 символами, чтобы переключиться с varchar2 на long

установка:

$ENV{NLS_CHARACTERSET} = 'AL32UTF8';  

перед подключением, похоже, не помогает.

Использование Java-клиента (SQuirreL SQL) и ручная запись оператора INSERT INTO просто вставляют запись, поэтому я уверен, что конфигурация базы данных не такова.

Какие-нибудь мысли?

1 ответ

Решение

Вы, вероятно, хотите установить переменную среды NLS_LANG. Для систем Unix-ish есть скрипт, поставляемый в $ORACLE_HOME/server/bin, который называется nls_lang.sh выводить разумное значение для вашей системы на основе переменной среды LANG.

например, для моей системы (LANG=en_GB.UTF-8) эквивалентная настройка Oracle

NLS_LANG=ENGLISH_UNITED KINGDOM.AL32UTF8

Дополнительная информация: http://forums.oracle.com/forums/thread.jspa?threadID=381531

В посте Сергиуша говорится практически все, что вам нужно знать: я просто добавлю, что драйвер Perl DBD::Oracle основан на OCI, а драйвер JDBC на чистой Java - нет, поэтому они работают по-разному в одной и той же среде.

Другие вопросы по тегам