0

ロケールが空の文字列に設定されている場合、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 に設定されます。

私の質問は次のとおりです。これは通常の文書化された動作の変更ですか? デフォルトのロケールを空の文字列に設定するのは悪い習慣でしょうか?

4

1 に答える 1

0

オラクルのサポートにアクセスできる場合、115001.1 には、10g 以降でこれに関する変更があると記載されているようです。

9i のシック JDBC (=OCI) ドライバーは、NLS_LANG を使用して文字の変換方法を決定します。NLS_LANG を定義しないと、デフォルトの US7ASCII 設定が使用され、/ からデータベースへの非 ASCII データはすべて失われます。

JDBC が NLS_LANG を取得するために、Java コードに何も指定する必要はありません。

10g 以降、Thick JDBC ドライバーは NLS_LANG を無視し、JVM ロケールの言語、地域、および文字セット設定を使用します。

11g では、プロパティ -Doracle.jdbc.ociNlsLangBackwardCompatible=true をコマンドで設定できます。設定すると、JDBC はロケールからクライアント文字セット ID を取得する代わりに、NLS_LANG から文字セットを取得します。

ただし、プロパティに関係なく、言語と地域はロケールから取得されます。

于 2012-11-12T23:00:45.147 に答える