【问题标题】:Oracle Connection and nls_langOracle 连接和 nls_lang
【发布时间】:2009-05-19 10:45:43
【问题描述】:

我有一个旧数据库集,其中 NLS_LANG 设置为 IW8ISO8859P8。这是我无法改变的。

我有另一个应用程序,它不能使用 unicode,它处理我的应用程序处理的相同数据。 在某些字段中,有时,用户会插入代表 NIS 货币符号的字符 161 作为字符串的一部分。 当我尝试使用 oledb 从 .Net 读取这些数据时,一切都很好,但是当我尝试使用 oracle 客户端读取这些数据时,却得到了垃圾数据。当我在 .Net 中插入 NIS simble 时,它​​也会被保存为垃圾。

我知道我可以在获得数据后对其进行操作,但我正在寻找 .Net 中的 oracle 客户端的一些配置以使其正常工作。

我已经为此工作了几个星期,如有任何帮助,我将不胜感激。 肿瘤坏死因子 诺姆

【问题讨论】:

    标签: .net oracle oracleclient


    【解决方案1】:

    您检查客户端上的 nls_lang 设置了吗?对 nls 设置的任何更改都可以被客户端(注册表和环境)上的设置覆盖。也许这是您的问题的原因。 验证您在客户端上没有任何其他 nls 设置,并且您的任何功能都没有明确更改它。 您可以运行登录后触发器来更改会话格式。这将确保服务器设置将影响所有客户端。 此外,请确保已设置 nls_territory。它应该设置为 nls_lang 的一部分,但以防万一您的意思是 nls_language。我相信货币符号会受此影响。

    【讨论】:

    • 我已经检查了我客户的设置并且是相同的。请注意,我在同一台机器上运行了另一个非 Unicode 应用程序,它运行良好,我唯一的问题是当我从 .Net 获取数据时,Oracle 客户端将其转换为 unicode,我丢失了一些字符。
    【解决方案2】:

    最后,我使用辅助 nvarchar 列解决了它。并触发在它们之间进行转换。

    我在 plsql 中编写了函数,使用由许多 if 语句实现的自定义编码来执行与 Unicode 的字节转换。

    对于包含有问题数据的每一列,我添加了第二个带有 nvarchar 存储的列,并使用该函数来转换有问题的数据的触发器。

    所以遗留应用程序使用和更新 varchar 列,触发器将其转换为 Unicode 列。 .Net 代码使用 Unicode 列,触发器再次将信息转换为遗留应用程序中使用的有问题的编码。

    如果您需要更多信息,请随时与我联系以获取更多信息

    【讨论】:

    • 添加一些您编写的示例字节转换代码会很好
    • 这是一个粗略的字节到字节转换——没什么值得骄傲的:)
    • 我理解你,但是对于那些真正有教育意义的主题的新手,尤其是在编码方面,我觉得它永远不会是粗略的:)
    【解决方案3】:

    你看过甲骨文的NLS_LANG FAQ吗?

    【讨论】:

    • 是的,找不到任何帮助,因为在客户端之间移动数据的问题,.Net 没有被引用。
    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 2011-03-05
    • 2012-11-15
    • 2015-10-15
    • 2020-04-28
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多