将俄语字符从perl插入oracle

时间:2010-12-23 21:26:33

标签: oracle perl utf-8 cyrillic

我正在尝试将(使用Perl 5.8)俄语字符插入到设置为的oracle数据库中:

1 NLS_LANGUAGE RUSSIAN
2 NLS_TERRITORY CIS
3 NLS_CURRENCY р.
4 NLS_ISO_CURRENCY CIS
5 NLS_NUMERIC_CHARACTERS , 
6 NLS_CALENDAR GREGORIAN
7 NLS_DATE_FORMAT DD.MM.RR
8 NLS_DATE_LANGUAGE RUSSIAN
9 NLS_CHARACTERSET AL32UTF8
10 NLS_SORT RUSSIAN
11 NLS_TIME_FORMAT HH24:MI:SSXFF
12 NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
13 NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
14 NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
15 NLS_DUAL_CURRENCY р.
16 NLS_NCHAR_CHARACTERSET AL16UTF16
17 NLS_COMP BINARY
18 NLS_LENGTH_SEMANTICS BYTE
19 NLS_NCHAR_CONV_EXCP FALSE

在我打开通过DBD :: Oracle的连接之前,我设置了perl env。到

$ ENV {NLS_LANG} ='AMERICAN_AMERICA.AL32UTF8'

然而由于某种原因,俄语字符没有正确地对DB。 有人可以建议为什么吗?

由于

1 个答案:

答案 0 :(得分:0)

很难诊断出在插入和选择操作中涉及完整堆栈产品和操作系统的情况下会发生什么。我对欧元符号也有类似的问题,需要几天的时间来全面了解。它涉及putty编码,Linux语言环境,Linux会话NLS_LANG,Windows CodePage,Windows CMD代码页和使用的字符字体,以及Windows会话NLS_LANG。如果您正在进行Web编程,则页面和httpd的编码可能是另一个因素。通过一堆产品插入数据库并通过另一个产品进行检索,确保数据正常。我进行了设置,因此我可以使用Linux,Windows和Windows CMD的任意组合插入/选择相同的数据,作为它在数据库中正确的探测。如果你只使用一个系统,你可以插入€,检索€,并且没有意识到DB保留了一些它不能识别为€的东西。直到......才会注意到这一点。

另外,对于文本I / O,您应该在NLS_LANG中使用您的OS / Web服务器区域设置编码而不是DB。例如在Windows中通常是MSWINxxxx。转换为AL32UTF8由sqlnet完成。