我刚刚发现,当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。
我的问题是:这是一种正常的,有记录的行为改变吗? 也许将默认语言环境设置为空字符串是一种不好的做法?
答案 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 区域设置。
语言和区域取自语言环境,无论如何 财产虽然。