【问题标题】:How do I change the NLS_CHARACTERSET setting on Windows 7 for Oracle 11g ODBC client如何在 Windows 7 上为 Oracle 11g ODBC 客户端更改 NLS_CHARACTERSET 设置
【发布时间】:2015-07-11 06:04:30
【问题描述】:

我正在尝试将 Oracle 数据库中的数据检索到 Windows 7 PC 上的 MS Access 或 Excel 中。数据包括度数和直径符号等字符。这些在 PC 上显示不正确。我可以看到在我的查询中使用转储函数正确存储了数据,并且是对客户端字符集的转换没有将它们带入。

通过查看此查询,并使用SELECT * FROM NLS_database_PARAMETERS 查询数据库参数,我可以看到NLS_CHARACTERSET = US7ASCII。我认为这是问题的原因,因为此字符集中不包含直径符号等。

但是,我检查了注册表以查看 NLS_LANG 的设置,它是 ENGLISH_UNITED KINGDOM.WE8MSWIN1252。我知道我正在查找正确的注册表项,因为当我更改语言/区域(例如更改为 GERMAN_GERMANY)时,它确实会更改我的查询。

我还检查了覆盖此设置但找不到的环境变量。我尝试使用与上述相同的设置创建一个 NLS_LANG 环境变量,但这没有任何区别。

我的 Windows 代码页设置为 1252。数据库NLS_NCHAR_CHARACTERSET 设置为AL16UTF16

对下一步做什么有什么想法吗?

【问题讨论】:

    标签: windows oracle nls-lang


    【解决方案1】:

    如果NLS_CHARACTERSET 设置为US7ASCII,那么您将永远不会从中获得任何特殊字符。使用NLS_NCHAR_CHARACTERSET=AL16UTF16,您应该得到任何字符,前提是您的列的数据类型是NVARCHAR2NCHAR(不是VARCHAR2

    将您的本地 NLS_LANG 设置为 ENGLISH_UNITED KINGDOM.AL32UTF8 然后它应该可以工作。

    【讨论】:

    • 感谢 Wernfried 的回复。我的问题是如何将 NLS_LANG 设置为客户端上的正确字符集?我试过的都没有用。
    • 在您的注册表中或作为您已经做的环境变量
    • 感谢 Wernfried。我想我会在另一台电脑上试试。编辑注册表或创建环境变量对这个不起作用...
    • 注意,有两个位置:HKLM\SOFTWARE\ORACLE\KEY_{ORACLE_HOME_NAME}\NLS_LANG 用于 64 位,HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{ORACLE_HOME_NAME}\NLS_LANG 用于 32 位。设置正确的。
    • 感谢@Wernfried 提供的其他信息。我的注册表中只有一个 HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ 键。我猜这是有道理的,因为我只有 32 位版本的 ODBC 驱动程序。如果我对此注册表设置中的语言和/或区域进行了编辑,那么下次我关闭并重新打开 Access 时,会在查询中获取更改。但是无论我在注册表项中输入什么,语言都保持为 US7ASCII。我不明白为什么!
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 2021-04-11
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多