从perl插入多字节字符到oracle时命中ORA-01461

时间:2010-12-12 21:25:07

标签: perl oracle multibyte ora-01461

我有一个perl脚本,它将文本文件中的记录插入到我们的数据库中。每当记录具有像“RODR_Í_GUEZ”这样的多字节字符时。我收到错误ORA-01461,但是我没有接近4000个字符从varchar2切换到long

设置:

$ENV{NLS_CHARACTERSET} = 'AL32UTF8';  
在连接之前

似乎没有帮助。

使用java客户端(SQuirreL SQL)并手动编写INSERT INTO语句插入记录就好了,所以我确定不是数据库的配置方式。

有什么想法?

1 个答案:

答案 0 :(得分:5)

您可能想要设置NLS_LANG环境变量。对于Unix-ish系统,在$ ORACLE_HOME / server / bin中提供了一个名为nls_lang.sh的脚本,用于根据LANG环境变量为系统输出合理的值。

e.g。对于我的系统(LANG = en_GB.UTF-8),等效的Oracle设置是

NLS_LANG=ENGLISH_UNITED KINGDOM.AL32UTF8

更多信息:http://forums.oracle.com/forums/thread.jspa?threadID=381531

Sergiusz的帖子说几乎所有你需要知道的:我只是补充一点,Perl DBD :: Oracle驱动程序是基于OCI的,而纯Java JDBC驱动程序则不是,因此它们的工作方式不同环境。