sql >> データベース >  >> RDS >> Oracle

OracleのNCHAR列またはNVARCHAR列に国別文字を挿入しても機能しません

    編集: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
    


    1. MySQLでのOracleJDeveloperスニペットの使用

    2. Oracleエイリアシングを理解する-2番目のクエリでラップされない限り、エイリアスがクエリで認識されないのはなぜですか?

    3. Herokuの進化におけるエラー

    4. Postgresデータベース内のすべてのテーブルを切り捨てる