1

我正在尝试将(使用 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{NLS_LANG} = 'AMERICAN_AMERICA.AL32UTF8'

但是由于某种原因,俄语字符无法正确输入数据库。谁能告诉我为什么?

谢谢

4

1 回答 1

0

如果没有涉及插入和选择操作的完整产品堆栈和操作系统,很难诊断发生了什么。我在使用欧元符号时遇到了类似的问题,我花了几天时间才了解完整的情况。它涉及腻子编码、Linux 语言环境、Linux 会话 NLS_LANG、Windows 代码页、Windows CMD 代码页和使用的字符字体,以及 Windows 会话 NLS_LANG。如果您正在做 Web 编程,页面和 httpd 的编码可能是另一个因素。确保数据库中的数据可以通过一堆产品插入并通过另一个产品检索。我对其进行了设置,以便我可以使用 Linux、Windows 和 Windows CMD 的任意组合插入/选择相同的数据,作为它在数据库中正确获取的探针。如果您只使用一个系统,您可以插入€,检索€,然后不要' 没有意识到数据库保留了它不识别为€的东西。这会被忽视,直到......

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

于 2010-12-26T20:56:34.303 回答