我试图从Ruby命中Oracle并在第一行收到错误。 (我实际上是在撬开这个,但这可能并不重要。)
[1] pry(main)> require 'oci8'
RuntimeError: Invalid NLS_LANG format: AMERICAN
问题是什么以及如何解决?
Googling the error message没有发现任何有希望的东西。 ( 现在 出现了这个问题。)在stackoverflow上唯一与此类似的问题是处理一个不同的问题(变量根本没有任何值,即使用户设置一个)并且那里的答案对我不起作用(建议的值也无效,并且我的环境中未设置$LANG
,因此将其设置为不起作用。)
答案 0 :(得分:3)
NLS_LANG
的格式应为<language>_<territory>.<characterset>
直接来自the doc,有一个与您的确切用例相对应的示例:
NLS_LANG环境变量在所有基于UNIX的平台上设置为shell的本地环境变量。例如,如果操作系统区域设置为en_US.UTF-8,则相应的NLS_LANG环境变量应设置为AMERICAN_AMERICA.AL32UTF8 。
请注意AL32UTF8
是UTF8
(不带连字符)的超集,接受所有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
。