Colpendo ORA-01461 quando si inseriscono i caratteri multibyte da perl in Oracle
Domanda
Ho uno script perl che sta inserendo record da un file di testo nel nostro database. Ogni volta che il record ha un carattere multibyte come "RODR_Í_GUEZ". Ricevo l'errore ORA-01461, ma io sono in nessun posto vicino i 4000 caratteri per passare da varchar2 a lungo
Impostazione:
$ENV{NLS_CHARACTERSET} = 'AL32UTF8';
prima di collegare non sembrano aiutare.
Utilizzando un client java (scoiattolo SQL) e scrivere manualmente l'istruzione INSERT INTO inserisce il record più che bene, quindi sono sicuro che non è come il database è configurato.
Qualche idea?
Soluzione
Probabilmente si desidera impostare la variabile di ambiente NLS_LANG. Per i sistemi Unix-ish, v'è uno script fornito in $ ORACLE_HOME / server / bin chiamato nls_lang.sh
per emettere un valore ragionevole per il sistema, sulla base della variabile d'ambiente LANG.
es. per il mio sistema (LANG = it_IT.UTF-8) l'impostazione di Oracle equivalente è
NLS_LANG=ENGLISH_UNITED KINGDOM.AL32UTF8
Più informazioni: http://forums.oracle.com/forums/thread .jspa? threadID = 381531
Il post di Sergiusz ci dice praticamente tutto quello che dovete sapere: io solo aggiungere che il driver Perl DBD :: Oracle è basata OCI, e il puro Java-driver JDBC non è, di conseguenza, essi funzionano in modo diverso nella stessa ambiente.