使用“空”默认语言环境和驱动程序10.2.0.4时ORA-12705

时间:2012-11-12 17:01:17

标签: java oracle driver locale ora-12705

我刚刚发现,当Locale设置为空字符串时,使用JDBC Thin驱动程序版本10.2.0.4创建与Oracle的连接失败,例如:

Locale.setDefault(new Locale("",""));
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
con = DriverManager.getConnection(url, userName, password);     

以上代码将生成ORA-12705:无法访问NLS数据文件或指定的无效环境。 如果我指定en US或者只是en。

,它可以正常工作

但是如果我使用Oracle驱动程序9.2.0.1,那么这段确切的代码就可以了:NLS设置为AMERICAN。

我的问题是:这是一种正常的,有记录的行为改变吗? 也许将默认语言环境设置为空字符串是一种不好的做法?

1 个答案:

答案 0 :(得分:0)

如果您有权访问oracle支持,请注意115001.1似乎说明从10g开始有更改:

  

9i Thick JDBC(= OCI)驱动程序将使用NLS_LANG来确定   如何转换字符。不定义NLS_LANG将会   这将使用默认的US7ASCII设置,来自/的任何非ASCII数据   数据库将丢失。

     

您无需为Java代码指定任何内容供JDBC选择   NLS_LANG。

     

从10g开始,Thick JDBC驱动程序忽略了NLS_LANG和   使用JVM中的语言,区域和字符集设置   区域设置。

     

在11g属性-Doracle.jdbc.ociNlsLangBackwardCompatible = true是   可以在命令上设置。如果设置它会导致JDBC获取字符集   来自NLS_LANG而不是从中获取客户端字符集ID   区域设置。

     

语言和区域取自语言环境,无论如何   财产虽然。