編集:OracleでUTFを処理する最良の方法は、データベース文字セットAL32UTF8を使用してデータベースを作成し、通常のvarchar2列を使用することであることに注意してください。 nchar列を使用する際の問題の1つは、引数がデフォルトでncharとして送信される場合、Oracleが通常のchar/varchar2列のインデックスを使用できないことです。
とにかく:データベースを変換できない場合:
まず、Unicodeリテラルには、次のように「n」を前に付ける必要があります。
select n'Language - Språk - Język' from dual;
*)8ビットエンコーディングはこのテキストを処理できません
残念ながら、それだけでは十分ではありません。
何らかの理由で、データベースクライアントのデフォルトの動作は、すべての文字列リテラルをデータベースの文字セットに変換することです。つまり、データベースが文字列を認識できるようになる前でも、値が変更されます。
クライアントは、Unicode文字をNCHARまたはNVARCHAR列に挿入できるようにするために、いくつかの構成が必要です。
Unix上のSQLPlus
これらのenvironemnet変数は、UTF-8ファイルを使用するようにUNIX環境とsqlplusを設定し、Unicodeで文字列リテラルを送信するようにsqlplusを構成します。
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8はSolaris用です-Linuxまたは他のシステムでは異なる文字列が必要になる場合があります。locale -a
を使用してください サポートされているロケールを一覧表示します。)
JDBCドライバー
OracleのJDBCドライバを使用するアプリケーションでは、Unicodeで文字列リテラルを送信するために次のシステムプロパティを定義する必要があります。
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
SQL開発者
sqldeveloper.confを見つけて、次の行を追加します。
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
MicrosoftWindows上のSQLPlus
Microsoft WindowsまたはToad上のSQLplusがutf-8を処理するかどうかは試していません。Sqlplusw.exeがそれを実行する可能性があり、次のレジストリ設定でうまくいく可能性があります。
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true