データベース内からフォルダを作成するためのコードがあります(java/PL/SQLの組み合わせ)。Javaデータベースを使用してユニコード文字でフォルダを作成する
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "rtp_java_utils" AS
import java.io.*;
public class rtp_java_utils extends Object
{
public static int mkdir (String path) {
File myFile = new File (path);
if (myFile.mkdir()) return 1; else return 0;
}
}
CREATE OR REPLACE FUNCTION mkdir (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME 'rtp_java_utils.mkdir (java.lang.String) return java.lang.int';
は、最近では、Oracle 12cのデータベースを使用して開始し、現在、私たちはその名前に特殊文字を含むフォルダに問題(例えば「S」、「C」オト「のDJ」)を有するされています。フォルダは作成されますが、特殊文字はありません。代わりにいくつかの文字の組み合わせが表示されます。たとえば、パラメータ "d:/ test/testingščđ"を使用して作成されたフォルダは "testĹÄおよびÄ '"です。したがって、すべての特殊文字に2文字が使用されます。
データベースは、NLS_CHARACTERSET AL32UTF8のバージョン12C(12.1.0.2.0)です。 ファイルシステムは、UTF-8エンコーディングのNTFSです。 OSは、Windowsサーバー2012で 一部のJavaシステム・プロパティは次のとおりです。 - のfile.encoding UTF-8 - UnicodeLittle
をsun.io.unicode.encoding興味深い、我々は同じ結果(同じ偽フォルダ名)を取得されますNTFSファイルシステムのエンコーディングがUTF-8かWINDOWS-1250かどうかは関係ありません。私たちは両方のオプションを試しました。
私たちの推測では、javaはある文字セットから別の文字セットに与えられたフォルダ名を暗黙的に変換しています。最終結果はfalse folder nameです。しかし、私たちが試したすべてのもの(PLSQLまたはjavaの明示的なフォルダ名の変換、javaのシステムパラメータの変更...)は機能しませんでした。
以前のデータベースではすべてがうまくいっていました(EE8MSWIN1250キャラクタセットのデータベースバージョン10.1.0.5.0、Windows-1250エンコーディングのNTFSファイルシステム)。
誰かがアイデアを持っていますか、何が間違っていますか?
ありがとうございました!