【问题标题】:choosing NLS_LANG for Oracle为 Oracle 选择 NLS_LANG
【发布时间】:2011-12-28 13:23:31
【问题描述】:

根据该网站, http://www.dba-oracle.com/t_nls_lang.htm

即使数据库和客户端使用相同的字符集 (AL32UTF8),也可能会出现问题。我不明白这怎么可能。 引自网站:

例如,假设数据库字符集是 AL32UTF8,则 客户端是英文 Windows 操作系统,NLS_LANG 客户端上的设置是 AL32UTF8。 进入数据库的数据是 以 WE8MSWIN1252 编码且不转换为 AL32UTF8 数据 因为客户端的 NLS_LANG 设置与数据库匹配 字符集。因此 Oracle 假定不需要转换, 并且无效的数据被输入到数据库中。

当客户端中的编码为 AL32UTF8 时,数据如何以 WE8MSIN1252 形式进入数据库?

【问题讨论】:

    标签: oracle encoding utf-8 internationalization globalization


    【解决方案1】:

    因为操作系统本身使用其他字符集(本例中为 WE8MSIN1252)。但由于 NLS_LANG(在客户端)设置为 AL32UTF8,Oracle 不知道这一点。 Oracle 始终使用 NLS_LANG 中的值并忽略系统设置,而(几乎)所有其他软件都使用操作系统设置。

    因此,要解决此问题,本地(客户端)NLS_LANG 必须与操作系统字符集相同。或者(其他选项)客户端上运行的软件必须自行重新编码字符。

    【讨论】:

    • 如果我理解正确,数据传输应该是这样发生的:客户端 -> 服务器(Oracle 托管)操作系统 -> Oracle(数据库)。你是在暗示这个吗?我以前认为数据直接来自 Client -> Oracle(DB),因此会造成混淆。
    • 很高兴知道!感谢您的提示!
    • 不,数据流是:客户端软件(使用 OS 编码)-> oracle 客户端驱动程序(使用 NLS_LANG)-> oracle db 服务器(使用 NLS_LANG)
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 2014-01-28
    • 2015-10-15
    • 2014-08-10
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多