Удар 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 - нет, поэтому они работают по-разному в одной и той же среде.