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

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

настройка:

$ENV{NLS_CHARACTERSET} = 'AL32UTF8';  

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

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

Есть мысли?

1 Ответ

5 голосов
/ 13 декабря 2010

Возможно, вы хотите установить переменную среды 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 - нет, поэтому они работают по-разному в одном и том же окружающая среда.

...