【问题标题】:Ö and other special characters not getting saved correctly in the client data baseÖ 和其他特殊字符未正确保存在客户端数据库中
【发布时间】:2020-05-13 12:36:27
【问题描述】:

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

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

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

如果我需要提供更多信息,请告诉我。

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

【问题讨论】:

  • 尝试使用NVARCHAR
  • 立即发送另一个数据库版本是不可行的。
  • 在许多情况下,Oracle 不是问题,而是访问 Oracle 的软件。即使您从 shell 运行 SQLplus,shell 也很可能是问题所在。您能否提供更多信息,涉及哪些其他软件和操作系统?
  • @Codo,我的 java 应用程序正在 Linux 服务器上运行。
  • 问题可能出在 Java 应用程序中,而不是在 Oracle 中。您能否提供有关 Java 应用程序以及它如何处理数据、如何输入数据等的更多信息?

标签: oracle character-encoding varchar2 nls-lang


【解决方案1】:

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

set NLS_LANG=GERMAN_AUSTRIA.AL32UTF8

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

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

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

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

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

HKLM\软件\甲骨文

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多