Schlagen ORA-01461, wenn Mehrbytezeichen von Perl in oracle Einfügen
Frage
ich einen Perl-Skript, das Datensätze aus einer Textdatei in unsere Datenbank eingefügt wird. Jedes Mal, wenn der Datensatz hat ein Multibyte-Zeichen wie „RODR_Í_GUEZ“. Ich erhalte den Fehler ORA-01461, aber ich bin noch lange nicht die 4000 Zeichen Wechsel von varchar2 zu lange
Einstellung:
$ENV{NLS_CHARACTERSET} = 'AL32UTF8';
vor dem Anschluss scheint nicht zu helfen.
einen Java-Client (SQuirreL SQL) verwenden und manuell die INSERT INTO-Anweisung Schreiben fügt den Datensatz ganz gut, also bin ich sicher, dass es nicht, wie die Datenbank konfiguriert ist.
Alle Gedanken?
Lösung
Sie wollen wahrscheinlich die Umgebungsvariable NLS_LANG einzustellen. Für Unix-ish-Systemen gibt es ein Skript in $ ORACLE_HOME / server / bin genannt nls_lang.sh
zur Ausgabe eines angemessenen Wert für Ihr System geliefert wird, auf der Grundlage der Umgebungsvariable LANG.
z. für mein System (LANG = en_GB.UTF-8) die äquivalente Oracle Einstellung ist
NLS_LANG=ENGLISH_UNITED KINGDOM.AL32UTF8
Mehr Infos: http://forums.oracle.com/forums/thread .jspa? threadID = 381.531
Sergiusz die Post dort sagt praktisch alles müssen Sie wissen: Ich werde nur hinzufügen, dass die Perl DBD :: Oracle-Treiber ist OCI-basiert, und die pure-Java-JDBC-Treiber ist nicht, damit sie funktionieren anders in der gleichen Umwelt.