0

当我最后执行代码时,字符会正确保存。但是,当在客户端执行具有相同数据的相同代码时,字符在写入数据库时​​会发生变化,当它们显示在屏幕上时会导致问题。该列的数据类型是 varchar2。

最初,我认为他们最后的数据库字符集与我的不同,所以我向客户端询问了 NLS 参数。事实证明,字符集相同,但语言和领土不同。我认为这可能会导致这个问题,但我不确定。如果是,我该如何要求他们更改?

Paramter            Client        Me
NLS_CHARACTERSET    AL32UTF8      AL32UTF8
NLS_LANGUAGE        GERMAN        AMERICAN
NLS_TERRITORY       AUSTRIA       AMERICA

请告诉我是否需要提供更多信息。

编辑:问题不在于数据库字符集,而在于应用程序。在 jvm 参数中添加 -Dfile.encoding=UTF-8 后修复了此问题。

4

1 回答 1

0

您可以要求用户仅对当前会话执行以下命令(通过 Windows 上的 cmd)

set NLS_LANG=GERMAN_AUSTRIA.AL32UTF8

然后从同一个会话中启动您的应用程序以进行测试(如果可能)。

请注意,所有数据库消息都会自动翻译成德语,就像这样

SQL> jj
SP2-0042: Unbekannter Befehl "jj" - restliche Zeile wurde ignoriert.

如果您向非德语客户发送“原始”oracle 消息,这可能会很烦人

成功完成测试后,您可以将系统变量 NLS_LANG 设置为之前给您的值,或者转到客户端 Windows 机器上的注册表编辑器(如果适用)并在下为 Oracle 主目录设置 NLS_LANG 参数值

HKLM\软件\甲骨文

这将更改任何会话客户启动的参数

于 2020-01-28T06:50:56.040 回答