JDBC Thin驱动程序的NLS_LANG设置是什么?

28

我正在使用Oracle JDBC驱动程序版本10.2.0 (ojdbc14.jar)。我希望可以手动配置它的NLS_LANG设置。有办法吗?

目前,它从VM变量user.language获取此设置(该变量会自动设置为当前语言环境或从系统环境中启动)。

当用户将应用程序语言环境更改为Oracle JDBC驱动程序不支持的语言环境(例如mk_MK)时,这就成为了一个问题。在这种情况下,下一次获取连接时,我会收到以下异常:

ORA-00604:递归SQL级别1发生错误
ORA-12705:无法访问NLS数据文件或指定了无效的环境

我可以在获取连接之前实时更改语言环境,并且来回切换到用户选择的语言环境,但这似乎不太优雅和高效。

5个回答

20

有趣。投票给自己在这里交叉发布的答案 :D - FoxyBOA
1
+1作为一种比目前被接受的答案更少侵入性的方法。 - Marcel Stör
谢谢。这适用于SQLDeveloper和WebLogic数据源。 - WelcomeTo
1
这个解决了我的问题:-Duser.language=en -Duser.region=US - Cedric Simon

16

NLS_LANG设置是从java.util.Locale派生的。因此,在连接之前,您需要进行类似于这样的调用:

Locale.setDefault(Locale.<your locale here>);

1
是的,这正是我最终所做的。它可以正常工作,但不太美观。谢谢! - dasp
神级答案。使用Locale.US来模仿AMERICAN语言设置。 - Koshinae

11

我曾经遇到过同样的问题,后来发现使用thin jdbc Oracle驱动程序不需要指定NLS_LANG或系统区域设置。 但是当你连接到非英语数据库时,需要将orai18n.jar添加到类路径中。

引用自Oracle® Database JDBC Developer’s Guide and Reference

  

提供全球化支持

     

基本的Java Archive (JAR)文件ojdbc5.jar和ojdbc6.jar包含所有必要的类,以提供完整的全球化支持:

     
      
  • 对于CHAR,VARCHAR,LONGVARCHAR或CLOB数据的Oracle字符集,如果它们不是作为Oracle对象或集合类型的数据成员检索或插入,则包括在其中。
  •   
  • 字符集US7ASCII,WE8DEC,WE8ISO8859P1,WE8MSWIN1252和UTF8的对象和集合的CHAR或VARCHAR数据成员。
  •   
     

要在对象或集合的CHAR或VARCHAR数据成员中使用任何其他字符集,您必须将orai18n.jar添加到应用程序的CLASSPATH环境变量中。


7

以下是我使用的调用Java的方法:

-Duser.country=us -Duser.language=en

如果“en”国家代码也导致ORA-12705错误,请参考此处的解决方法。

1
这是因为没有“EN”国家。有:美国,英国和许多其他国家将英语作为官方语言。 - David Balažic

1

您应该使用旧的Oracle 9.2 JDBC驱动程序,它与Oracle 10g完全兼容并获得认证。旧的驱动程序不使用ALTER SESSION SET NLS_LANGUAGE命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接