修复RuntimeError:无效的NLS_LANG格式:AMERICAN

时间:2015-05-15 22:25:33

标签: ruby oracle

我试图从Ruby命中Oracle并在第一行收到错误。 (我实际上是在撬开这个,但这可能并不重要。)

[1] pry(main)> require 'oci8'
RuntimeError: Invalid NLS_LANG format: AMERICAN

问题是什么以及如何解决?

Googling the error message没有发现任何有希望的东西。 ( 现在 出现了这个问题。)在stackoverflow上唯一与此类似的问题是处理一个不同的问题(变量根本没有任何值,即使用户设置一个)并且那里的答案对我不起作用(建议的值也无效,并且我的环境中未设置$LANG,因此将其设置为不起作用。)

2 个答案:

答案 0 :(得分:3)

NLS_LANG的格式应为<language>_<territory>.<characterset>

直接来自the doc,有一个与您的确切用例相对应的示例:

  

NLS_LANG环境变量在所有基于UNIX的平台上设置为shell的本地环境变量。例如,如果操作系统区域设置为en_US.UTF-8,则相应的NLS_LANG环境变量应设置为AMERICAN_AMERICA.AL32UTF8

请注意AL32UTF8UTF8(不带连字符)的超集,接受所有Unicode字符。 UTF8仅支持Unicode 3.1及更早版本。我强烈建议您使用AL32UTF8作为默认的“UTF-8”字符集,除非您有非常具体的需求。

在Oracle 12.1中,AL32UTF8支持最高6.1的Unicode。一个优点是AL32UTF8支持Unicode 4.0引入的supplementary characters(代码点从U + 10000到U + 10FFFF)

答案 1 :(得分:1)

我不知道“AMERICAN”的价值来自何处,但事实证明,ruby-oci8宝石会接受的更好的选择是NLS_LANG=AMERICAN_AMERICA.UTF8

相关问题